Python中zip类型中元素的串联

2024-06-24 12:32:17 发布

您现在位置: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命令,但它不起作用。任何帮助都将不胜感激


Tags: 字符串元素类型列表abzipcacc
2条回答

您可以使用itertools.chainitertools.product以及str.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']

使用嵌套理解:

>>> 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

相关问题 更多 >