我想在列表中转换多个列表?我正在做一个循环,但每个子列表项不会在它之间得到一个逗号。如何使用Python在列表内转换多个列表?
myList = [['a','b','c','d'],['a','b','c','d']]
myString = ''
for x in myList:
myString += ",".join(x)
print myString
输出继电器:
a,b,c,da,b,c,d
所需的输出:
a,b,c,d,a,b,c,d
我想在列表中转换多个列表?我正在做一个循环,但每个子列表项不会在它之间得到一个逗号。如何使用Python在列表内转换多个列表?
myList = [['a','b','c','d'],['a','b','c','d']]
myString = ''
for x in myList:
myString += ",".join(x)
print myString
输出继电器:
a,b,c,da,b,c,d
所需的输出:
a,b,c,d,a,b,c,d
这可以用一个列表理解,你会“扁平化”的名单列表进行到一个列表,然后使用“连接”方法使您的列表成为一个字符串。 ','部分表示用逗号分隔每个部分。
','.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
但是,为了进一步分解这部分内容来解释这是如何工作的,我们可以看到下面的例子E:
# 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
所以,在这个寻求进一步的,它确实引起了我的兴趣。我怀疑实际上其他解决方案可能更快。所以,为什么不测试它!
我采取了所提出的每种解决方案,并用更大的样本集运行计时器,以查看会发生什么。运行代码产生递增的顺序如下结果:
所以,这里的赢家实际上是地图的实现。如果有人有兴趣,这里是用来时间码结果:
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())
from itertools import chain
myList = [['a','b','c','d'],['a','b','c','d']]
print(','.join(chain.from_iterable(myList)))
a,b,c,d,a,b,c,d
myList = [['a','b','c','d'],[a','b','c','d']]
smyList = myList[0] + myList[1]
str1 = ','.join(str(x) for x in smyList)
print str1
输出
a,b,c,d,a,b,c,d
你也可以只参加两个级别:
>>> ','.join(map(','.join, myList))
'a,b,c,d,a,b,c,d'
它比其他解决方案更短,速度更快:
>>> myList = [['a'] * 1000] * 1000
>>> from timeit import timeit
>>> timeit(lambda: ','.join(map(','.join, myList)), number=10)
0.18380278121490046
>>> from itertools import chain
>>> timeit(lambda: ','.join(chain.from_iterable(myList)), number=10)
0.6535200733309843
>>> timeit(lambda: ','.join([item for sub_list in myList for item in sub_list]), number=10)
1.0301431917067738
我也试过[['a'] * 10] * 10
,[['a'] * 10] * 100000
和[['a'] * 100000] * 10
和它总是相同的画面。
我会举一个例子,它不是那些不熟悉它们的列表理解,因此它们可以很容易地转化为理解。 – KronoS
同意。我将展开这个例子。 – idjaw
并使用与OP相同的变量名,所以my_list - > myList – Mathias711