从列表列表中创建一个平面列表,其中元素是字符串

时间:2014-07-09 15:18:53

标签: python list

我知道这里有一个类似的问题Making a flat list out of list of lists in Python

但是当列表的元素是字符串时,这种方法不会削减它:

arr = [['i', 'dont'], 'hi']
[item for sublist in arr for item in sublist]
>>['i', 'dont', 'h', 'i']

我需要的是:

["I", "dont", "hi"]

THX

2 个答案:

答案 0 :(得分:4)

修改arr,以便所有顶级字符串都包含在列表中。然后通常的列表展平方法将正常工作。

arr = [['i', 'dont'], 'hi']
arr = [[item] if isinstance(item, str) else item for item in arr]
#arr is now [['i', 'dont'], ['hi']]
print [item for sublist in arr for item in sublist]

结果:

['i', 'dont', 'hi']

答案 1 :(得分:2)

我知道有一种方法可以使用您的方法来完成它,但我发现它不太可读。

def outlist(li, flatlist):
    if isinstance(li, str):
        flatlist.append(li)
    elif len(li) > 1:
        for i in li:
            outlist(i, flatlist)

flatlist = []
outlist([['test', 'test2'], 'test3'], flatlist)
print(flatlist)