如何使用Python在列表中转换多个列表?

use*_*044 4 python join nested-lists

我想在列表中转换多个列表?我正在使用循环,但每个子列表项之间没有逗号.

myList = [['a','b','c','d'],['a','b','c','d']]
myString = ''
for x in myList:
    myString += ",".join(x)
print myString
Run Code Online (Sandbox Code Playgroud)

输出继电器:

a,b,c,da,b,c,d
Run Code Online (Sandbox Code Playgroud)

期望的输出:

a,b,c,d,a,b,c,d
Run Code Online (Sandbox Code Playgroud)

idj*_*jaw 7

这可以使用列表推导来完成,您可以将列表列表"展平"到单个列表中,然后使用"join"方法使列表成为字符串.','部分表示用逗号分隔每个部分.

','.join([item for sub_list in myList for item in sub_list])
Run Code Online (Sandbox Code Playgroud)

注意:请查看下面的分析,了解被测试为最快的解决方案

演示:

myList = [['a','b','c','d'],['a','b','c','d']]
result = ','.join([item for sub_list in myList for item in sub_list])
Run Code Online (Sandbox Code Playgroud)

输出结果 - > 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)
Run Code Online (Sandbox Code Playgroud)

所以在这一点上,输出my_new_list将产生:

['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)

所以,现在我们要做的就是把它变成一个字符串.这是','.join()进入游戏的地方.我们只是打电话:

myString = ','.join(my_new_list)
Run Code Online (Sandbox Code Playgroud)

输出将给我们:

a,b,c,d,a,b,c,d
Run Code Online (Sandbox Code Playgroud)

更深入的分析

所以,进一步看,这真的激起了我的兴趣.我怀疑其他解决方案实际上可能更快.因此,为什么不测试它!

我采用了所提出的每个解决方案,并使用更大的样本集对它们运行计时器以查看会发生什么.运行代码会按递增顺序产生以下结果:

  1. 地图:3.8023074030061252
  2. 链:7.675725881999824
  3. 理解: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())
Run Code Online (Sandbox Code Playgroud)


Let*_*lle 7

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
Run Code Online (Sandbox Code Playgroud)