0

我有 2 个列表a = [2, 6, 12, 13, 1, 4, 5]b = [12, 1]. list 中的元素是 listb的子集a

从上面的一对列表中,我需要创建一个元组列表,如下所示:

[(12,6),(12,2),(1,13),(1,12),(1,6),(1,2)] 

b基本上,在 list和 list的交点处a,所以从上面来看,例如ab第一个交点在 index 处2,即 value 12b因此,使用 list 中的第一个元素和 list中的第二个元素创建一个元组a。我正在python中尝试这个,有什么建议可以有效地创建这个元组吗?请注意,每个列表中可以包含 100 个元素。

4

2 回答 2

2

我认为这就是你想要的:

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)]
于 2013-03-16T11:24:35.767 回答
2

那这个呢:

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)]

它以原始顺序返回列表,而您的示例返回反向列表。如果这是一个问题,您可以轻松地扭转它们。

于 2013-03-16T11:39:43.737 回答