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.chain
和 itertools.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']
在 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.chain
和 itertools.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']