猿问

如何在单个操作中展平具有已知分隔符的列表列表

假设我有一个带有已知分隔符的列表;。如果该列表包含由该分隔符分隔的字符串,我将如何展平该列表?例如:


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


汪汪一只猫
浏览 164回答 3
3回答

慕桂英4014372

由于您希望最终值都是 stings,因此您可以在转换为字符串后对所有这些值调用 split 并使用itertools.chain.from_iterable:import itertoolsc = itertools.chain.from_iterable(str(item).split(";") for item in [1,2,'2;3'])print(list(c))结果:['1', '2', '2', '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 xseparator = ';'    vals = list(values([ 1, 2, '2;3' ]))
随时随地看视频慕课网APP

相关分类

Python
我要回答