Python 中 zip 类型的元素串联

Concatenation of elements in type zip in Python

在 Python 中,我收到了这样一个类型的 zip 作为输入:

[
    ('ef', ['c', 'b', 'a']),
    ('a', ['b']),
    ('ab', ['c']),
    ('b', ['c']),
    ('c', ['c', 'a']),
]

我必须连接同一项目中的元素并创建一个新的字符串列表。预期输出为:

['efc', 'efb', 'efa', 'ab', 'abc', 'bc', 'cc', 'ca']

请注意,第一个元素生成三个不同的字符串,最后一个元素生成两个字符串。问题是这些项目,因为它有多个元素要连接。我尝试使用 join 命令,但它不起作用。任何帮助将不胜感激。

使用嵌套理解:

>>> zipped = [
    ('ef', ['c', 'b', 'a']),
    ('a', ['b']),
    ('ab', ['c']),
    ('b', ['c']),
    ('c', ['c', 'a']),
]
>>> [pre + s for pre, suf in zipped for s in suf]
['efc', 'efb', 'efa', 'ab', 'abc', 'bc', 'cc', 'ca']

如果乍一看理解没有意义,请将其视为嵌套 for 循环:

>>> for pre, suf in zipped:
...     for s in suf:
...         print(pre + s)
... 
efc
efb
efa
ab
abc
bc
cc
ca

您可以将 itertools.chainitertools.productstr.join 一起使用:

data = [('ef', ['c', 'b', 'a']), ('a', ['b']), ('ab', ['c']), ('b', ['c']), ('c', ['c', 'a'])]

list(chain.from_iterable(map(''.join, product([s], li)) for s, li in data))

['efc', 'efb', 'efa', 'ab', 'abc', 'bc', 'cc', 'ca']