展平包含子列表的字符串列表 [英] Flatten a list of strings which contains sublists

查看:59
本文介绍了展平包含子列表的字符串列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 strings list ,其中包含一个 sublist os strings :

I have a list of strings which contains a sublist os strings:

ids = [u'spotify:track:3ftnDaaL02tMeOZBunIwls', u'spotify:track:4CKjTXDDWIrS0cwSA9scgk', [u'spotify:track:6oRbm1KOqskLTFc1rvGi5F',
u'spotify:track:045sp2JToyTaaKyXkGejPy']]

我试图用以下方法使其扁平化:

I tried to flatten it with:

[item for item in ids for item in sublist]

chain = itertools.chain(ids)

但是这些解决方案会分割字符串...

but these solutions split the strings...

如何将原始的列表展平为

[u'spotify:track:3ftnDaaL02tMeOZBunIwls', u'spotify:track:4CKjTXDDWIrS0cwSA9scgk', u'spotify:track:6oRbm1KOqskLTFc1rvGi5F',u'spotify:track:045sp2JToyTaaKyXkGejPy']

?

推荐答案

您可以使用带有 isinstance 检查的简单循环.

You could use a simple loop with an isinstance check.

out = []
for i in ids:
    if isinstance(i, list):
        out.extend(i)
    else:
        out.append(i)

print(out)  

输出:

['spotify:track:3ftnDaaL02tMeOZBunIwls',
 'spotify:track:4CKjTXDDWIrS0cwSA9scgk',
 'spotify:track:6oRbm1KOqskLTFc1rvGi5F',
 'spotify:track:045sp2JToyTaaKyXkGejPy'] 


您还可以使用 itertools.chain ,但需要额外的预处理层:


You could also use itertools.chain, but with an extra layer of preprocessing:

from itertools import chain

out = list(chain.from_iterable([i if isinstance(i, list) else [i] for i in ids]))
print(out)    

具有相同的输出.

这篇关于展平包含子列表的字符串列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆