我正在尝试修复我正在使用的列表中的一些损坏的 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。)
