如何在python中把两个列表的各项分别合并为列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在python中把两个列表的各项分别合并为列表相关的知识,希望对你有一定的参考价值。

1、新建一个 将两个列表组合成一个列表.py。

2、中文编码声明注释:# coding=gbk。

3、定义两个列表,分别是 s1 和 s2 ,并且赋值。

4、使用 + 号将两个列表组合成一个,并且使用 s3 接受新的列表。

5、使用 print() 函数输出 s3。

6、运行脚本,输出新组合出来的列表。

参考技术A 用extend():
Python 3.2.3 (default, Apr 11 2012, 07:15:24) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> A = [1, 2, 3]
>>> B = [4, 5, 6]
>>> A1 = A[:]
>>> A.append( B )
>>> print( A )
[1, 2, 3, [4, 5, 6]]
>>> A = A1[:]
>>> print( A )
[1, 2, 3]
>>> A += B
>>> print( A )
[1, 2, 3, 4, 5, 6]
>>>
参考技术B [ [a,b] for a,b in zip(list1,list2)]
生成一个以列表list1,list2各项合并列表为元素的列表本回答被提问者和网友采纳
参考技术C 是加起来生成一个列表吗

python两个列表进行合并

例如有a=[[A,A1],[B,A2],[C,A3],[D,A4]]有另一个列表B=[[A,B1],[B,B2],[C,B3],[D,B4]]同上有很多个这样的列表C=[[A,C1],[B,C2],[C,C3],[D,C4]] D=[[A,D1],[B,D2],[C,D3],[D,D4]]我要按照每个列表第一个元素进行合并最后生成结果是TMP = [[A,A1,B1,C1,D1],[B,A2,B2,C2,D2],[C,A3,B3,C3,D3]]最好有标准库不想做a*b*c*d次循环
或者改成字典合并dic1='A':1,'B':2,'C':3dic2='A':11,'B':22,'C':33合并成一个字典dic_all='A':[1,11],'B':[2,22],'C':[3,33]

---------------------------------------
对不起,有一个条件忘了加了。就是列表或者字典里面的字段不一定是排序排好的,而且也不一定A表里面和B表里面值是一样的
A=[['A','A1'],['B','A2'],['C','A3'],['D','A4']]
B=[['B','B2'],['A','B1'],['D','B4'],['C','B3']]
C=[['A','C1'],['B','C2'],['D','C4']]
D=[['B','D2'],['C','D3'],['D','D4']]

#!/usr/bin/env python
# coding: utf-8
#
# filename: lpart.py
# author: Tim Wang
# date: Dec., 2013

A=[['A','A1'],['B','A2'],['C','A3'],['D','A4']]
B=[['A','B1'],['B','B2'],['C','B3'],['D','B4']]
C=[['A','C1'],['B','C2'],['C','C3'],['D','C4']]
D=[['A','D1'],['B','D2'],['C','D3'],['D','D4']]

R = zip(zip(*A)[1], zip(*B)[1], zip(*C)[1], zip(*D)[1])
print R

dic1='A':1,'B':2,'C':3
dic2='A':11,'B':22,'C':33
dic3='A':111,'B':222,'C':333

keys = dic1.keys()
values = zip(
    zip(*dic1.items())[1],
    zip(*dic2.items())[1],
    zip(*dic3.items())[1]
)

dic_all=dict(zip(keys, values))
print dic_all

A=[['A','A1'],['B','A2'],['C','A3'],['D','A4']]
B=[['B','B2'],['A','B1'],['D','B4'],['C','B3']]
C=[['A','C1'],['B','C2'],['D','C4']]
D=[['B','D2'],['C','D3'],['D','D4']]

dicts = map(dict, (A,B,C,D))
totalkeys = reduce(lambda x,y: x|set(y.keys()), dicts, set())
dict_all = dict([(k, filter(None, map(lambda x: x.get(k), dicts))) 
    for k in totalkeys])

print dict_all


>python -u "lpart.py"
[('A1', 'B1', 'C1', 'D1'), ('A2', 'B2', 'C2', 'D2'), ('A3', 'B3', 'C3', 'D3'), ('A4', 'B4', 'C4', 'D4')]
'A': (1, 11, 111), 'C': (3, 33, 333), 'B': (2, 22, 222)
'A': ['A1', 'B1', 'C1'], 'C': ['A3', 'B3', 'D3'], 'B': ['A2', 'B2', 'C2', 'D2'], 'D': ['A4', 'B4', 'C4', 'D4']
>Exit code: 0    Time: 0.048

追问

列表第一个元素不是固定的而且顺序也不一定

追答

上面代码的第三个段落就是适应"列表第一个元素不是固定的而且顺序也不一定"情况的

参考技术A
A=[['A','A1'],['B','A2'],['C','A3'],['D','A4']]
B=[['A','B1'],['B','B2'],['C','B3'],['D','B4']]
C=[['A','C1'],['B','C2'],['C','C3'],['D','C4']]
D=[['A','D1'],['B','D2'],['C','D3'],['D','D4']]
arr=[A,B,C,D]
dic_all=x[0][0]:[y[1] for y in x] for x in zip(*arr)
list_all=[[x[0][0]]+[y[1]for y in x] for x in zip(*arr)]

if __name__=='__main__':
    print(list_all)
    print(dic_all)

 结果:

[['A', 'A1', 'B1', 'C1', 'D1'], ['B', 'A2', 'B2', 'C2', 'D2'], ['C', 'A3', 'B3', 'C3', 'D3'], ['D', 'A4', 'B4', 'C4', 'D4']]
'D': ['A4', 'B4', 'C4', 'D4'], 'A': ['A1', 'B1', 'C1', 'D1'], 'C': ['A3', 'B3', 'C3', 'D3'], 'B': ['A2', 'B2', 'C2', 'D2']

追问

列表第一个元素不是固定的而且顺序也不一定

参考技术B #!/usr/bin/env python
#-*- coding: utf-8 -*-
def merge(x, y):
for k,v in y.items():
try:
a_v = []
x_pre = x[k]
if isinstance(x_pre,list):
a_v.extend(x_pre)
else:
a_v.append(x_pre)
a_v.append(v)
x[k] = list(set(a_v))
except KeyError:
x[k] = v
return x

print reduce(merge, (dic1,dic2,dic3))
复杂度,O(n) , 对于列表可以先转换成字典!!本回答被提问者和网友采纳

以上是关于如何在python中把两个列表的各项分别合并为列表的主要内容,如果未能解决你的问题,请参考以下文章

如何通过在 Python 中将两个列表合并为一个,使用 CSV 模块或 Pandas 写入 csv 或 Excel 文件?

Python进行数组合并的方法

如何将字符串拆分为列表并在python中将两个已知令牌合并为一个?

Python:如何使用 for 循环合并两个列表,如 zip

如何在EXCEL中把两列表格里的数字合成一列并且中间用逗号隔开?

如何合并两个列表python