为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

汪汪一只猫 2021-09-24 16:08:22
假设我有一个带有已知分隔符的列表;。如果该列表包含由该分隔符分隔的字符串,我将如何展平该列表?例如:>>> [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']


查看完整回答
反对 回复 2021-09-24
?
牛魔王的故事

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' ]))


查看完整回答
反对 回复 2021-09-24
  • 3 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信