假设我有一个带有已知分隔符的列表;。如果该列表包含由该分隔符分隔的字符串,我将如何展平该列表?例如:>>> [item for item in [1,2,'2;3']][1, 2, '2;3']我可以用第二个 for 循环详细地做到这一点:vals = []separator = ';'for _val in [1,2,'2;3']: _val = str(_val) if separator not in _val: vals.append(_val) else: vals.extend(_val.split(separator))有没有办法在单个操作中执行此操作,例如使用列表理解或chain?
3 回答
慕桂英4014372
TA贡献1871条经验 获得超13个赞
由于您希望最终值都是 stings,因此您可以在转换为字符串后对所有这些值调用 split 并使用itertools.chain.from_iterable:
import itertools
c = itertools.chain.from_iterable(str(item).split(";") for item in [1,2,'2;3'])
print(list(c))
结果:
['1', '2', '2', '3']
牛魔王的故事
TA贡献1830条经验 获得超3个赞
如果您希望所有值都为 int,我会使用生成器执行此操作:
def values(items):
for x in items:
if isinstance(x, str) and separator in x:
yield from map(int, x.split(separator))
yield x
separator = ';'
vals = list(values([ 1, 2, '2;3' ]))
添加回答
举报
0/150
提交
取消