这可以使用列表推导来完成,您可以将列表“扁平化”为单个列表,然后使用“join”方法将列表变为字符串。 ',' 部分表示用逗号分隔每个部分。
','.join([item for sub_list in myList for item in sub_list])
注意:请看我下面的分析,看看这里提出的其他人最快的解决方案是什么
演示:
myList = [['a','b','c','d'],['a','b','c','d']]
result = ','.join([item for sub_list in myList for item in sub_list])
结果输出 -> a,b,c,d,a,b,c,d
但是,为了进一步分解它来解释它是如何工作的,我们可以看下面的例子:
# create a new list called my_new_list
my_new_list = []
# Next we want to iterate over the outer list
for sub_list in myList:
# Now go over each item of the sublist
for item in sub_list:
# append it to our new list
my_new_list.append(item)
所以此时,输出 my_new_list 将产生:
['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd']
所以,现在我们要做的就是把它变成一个字符串。这就是','.join() 发挥作用的地方。我们只需调用:
myString = ','.join(my_new_list)
输出将给我们:
a,b,c,d,a,b,c,d
进一步分析
所以,进一步看这个,真的激起了我的兴趣。我怀疑实际上其他解决方案可能更快。因此,为什么不测试它!
我采用了提出的每个解决方案,并使用更大的样本集对它们运行了一个计时器,以查看会发生什么。运行代码按递增顺序产生以下结果:
- 地图:3.8023074030061252
- 链:7.675725881999824
- 理解:8.73164687899407
因此,这里的明显赢家实际上是地图实现。如果有人有兴趣,这里是用于计时结果的代码:
from timeit import Timer
def comprehension(l):
return ','.join([i for sub_list in l for i in sub_list])
def chain(l):
from itertools import chain
return ','.join(chain.from_iterable(l))
def a_map(l):
return ','.join(map(','.join, l))
myList = [[str(i) for i in range(10)] for j in range(10)]
print(Timer(lambda: comprehension(myList)).timeit())
print(Timer(lambda: chain(myList)).timeit())
print(Timer(lambda: a_map(myList)).timeit())