繁体   English   中英

如何在Python中由3个成员组成的组合数组中转换3个列表?

[英]How do I convert 3 Lists in a combined array of 3 members in Python?

我是Python 3的新手,我来自Java和javascript。

我怎么去

a = ['a', 'b', 'c']
b = [1, 2, 3]
c = ['red', 'green', 'blue']

x = [ ['a', 1, 'red'], ['b', 2, 'green'], ['c', 3, 'blue'] ] 

以一种简单的方式,而无需使用一些循环(while / for / map)?

谢谢

这就是内置zip目的。 zip接受任意数量的可迭代对象,并返回包含来自相应索引的项的元组。

>>> a = ['a', 'b', 'c']
>>> b = [1, 2, 3]
>>> c = ['red', 'green', 'blue']
>>> list(map(list, zip(a, b, c)))
[['a', 1, 'red'], ['b', 2, 'green'], ['c', 3, 'blue']]

zip生成的元组zip在这里明确转换为列表,因为您请求了列表。 如果没有特别的理由让列表代替元组,则使用

>>> list(zip(a, b, c))
[('a', 1, 'red'), ('b', 2, 'green'), ('c', 3, 'blue')]

假设所有列表的长度相同,则可以使用列表理解

x = [[a [i],b [i],c [i]]对于范围(len(a))中的i

这将导致

[['a',1,'红色'],['b',2,'绿色'],['c',3,'蓝色']]

def combine_list(*args):
     return map(list, args)

final = list(combine_list(a,b,c))

它将像:

[['a','b','c'],[1、2、3],['红色','绿色','蓝色']]

正如您提到的“以一种简单的方式,无需使用某些循环(while / for / map)”

这是我能想到的最简单的方法:

首先,定义包含数据的a,b,c,p,q,r作为临时列表,并定义一个空列表x以存储最终输出。 简单地使用list的append函数将a,b和c顺序附加到x。 打印x,您将获得列表列表,而无需使用任何for循环! 但是,这将增加额外的内存和鸭子输入的风险。

    a = ['a', 'b', 'c']
    b = [1, 2, 3]
    c = ['red', 'green', 'blue']

    p = []
    q = []
    r = []

    x = []

    p.append(a[0])
    p.append(b[0])
    p.append(c[0])

    q.append(a[1])
    q.append(b[1])
    q.append(c[1])

    r.append(a[2])
    r.append(b[2])
    r.append(c[2])

    x.append(p)
    x.append(q)
    x.append(r)

    print(x)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM