Python - 从列表中生成元组
问题描述:
我有2个列表a = [2, 6, 12, 13, 1, 4, 5]
和b = [12, 1]
。列表b
中的元素是列表a
的子集。Python - 从列表中生成元组
从上面的一对列表,我需要创建元组的列表如下:基本上
[(12,6),(12,2),(1,13),(1,12),(1,6),(1,2)]
,在列表b
和列表a
的交点,所以从上方例如a
和b
第一个交点位于索引2
,值为12
。因此,使用列表b
中的第一个元素和列表a
中的第二个元素创建一个元组。我正在python中尝试这个,有效地创建这个元组的任何建议?请注意,每个列表可以包含100个元素。
答
这个怎么样:
a = [2, 6, 12, 13, 1, 4, 5]
b = [12, 1]
sum([ [ (bb,aa) for aa in a[0:a.index(bb)]] for bb in b], [])
结果是:
[(12, 2), (12, 6), (1, 2), (1, 6), (1, 12), (1, 13)]
它以原始顺序返回列表,而您的示例返回反转的列表。如果这是一个问题,你可以很容易地改变它们。
答
我想这是你想要的东西:
In [11]: a=[2,6,12,13,1,4,5]
In [12]: b=[12,1]
In [13]: ans=[]
In [14]: for x in b:
ind=a.index(x) #find the index of element in a
for y in a[:ind]: #iterate up to that index and append the tuple to a new list
ans.append((x,y))
....:
In [15]: ans
Out[15]: [(12, 2), (12, 6), (1, 2), (1, 6), (1, 12), (1, 13)]
使用list comprehension
:
In [16]: [(x,y) for x in b for y in a[:a.index(x)]]
Out[16]: [(12, 2), (12, 6), (1, 2), (1, 6), (1, 12), (1, 13)]
对不起,我不知道你需要什么......两个列表的交点是什么? – rodrigo 2013-03-16 11:20:40
@rodrigo,我现在编辑它。让我知道现在是否清楚? – Swati 2013-03-16 11:23:45
现在我明白了! :) – rodrigo 2013-03-16 11:41:38