Skip to main content
 首页 » 编程设计

python之使用理解有条件地加入先前的列表条目

2025年05月04日9lyj

我正在尝试修复我正在使用的列表中的一些损坏的 Linux 路径。

列表:

mylist = ['/root/path/path', '/cat', '/dog', '/root/path/path', '/blue', '/red'] 

要求:

如果元素不是以'/root'开头,则连接到它左边的元素。

到目前为止的代码:

mylist2 = [''.join(x) for x in mylist] 
 
print(mylist2) 

预期输出:

['/root/path/path/cat/dog', '/root/path/path/blue/red'] 

实际输出:

['/root/path/path', '/cat', '/dog', '/root/path/path', '/blue', '/red'] 

我也试过:

mylist2 = [''.join(x) if myroot not x for mylist] 

...产生语法错误...

对我做错了什么有什么想法吗?

请您参考如下方法:

如果您只使用常规循环,这会更简单。列表理解的问题在于,您没有对第一个列表的每个元素进行统一操作,从而为新列表创建一个元素。 (将列表综合视为 map 和 filter 的组合。您可以将一个旧值映射到一个新值,或删除一个旧值,但不能将多个旧值组合成一个新值。 )

mylist2 = [] 
for path in mylist: 
    if path.startswith('/root'): 
        mylist2.append(path) 
    else: 
        mylist2[-1] += path 

(这只是部分正确;它假定 mylist 的第一个元素实际上将以 /root 开头,因此如果 mylist2[-1] 为空,则永远不会使用 mylist2。)