我知道这里有一个类似的问题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
答案 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)