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

gdo*_*371 1 python list-comprehension python-3.x

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

列表:

mylist = ['/root/path/path', '/cat', '/dog', '/root/path/path', '/blue', '/red']
Run Code Online (Sandbox Code Playgroud)

要求:

如果元素不以'/root',则加入到其左侧的元素.

代码到目前为止:

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

print(mylist2)
Run Code Online (Sandbox Code Playgroud)

预期产量:

['/root/path/path/cat/dog', '/root/path/path/blue/red']
Run Code Online (Sandbox Code Playgroud)

实际产量:

['/root/path/path', '/cat', '/dog', '/root/path/path', '/blue', '/red']
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

mylist2 = [''.join(x) if myroot not x for mylist]
Run Code Online (Sandbox Code Playgroud)

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

关于我做错了什么的任何想法?

che*_*ner 6

如果您只使用常规循环,这会更简单.列表解析的问题在于,您没有对第一个列表的每个元素进行统一操作,这些元素为新列表创建元素.(想想名单comphension作为组合的mapfilter.您可以在一个旧值映射到一个新的价值,或者删除一个旧值,但不能将多个旧值组合成一个新的价值.)

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

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