0

假设我有一个清单:

[[0, 0], [0, 1], [1, 0], [0, 2], [1, 1], [2, 0], [0, 3], [1, 2], [2, 1], [3, 0]]

我已经从上面的列表中生成了另一个列表,基于一些满足条件的元素,可以说具有等于三的值:

[[0, 3], [3, 0]]

但是现在我想从更大的列表中访问一些元素,基于对我的第二个列表的一些修改,比如说从第二个列表中等于 3 的那些值中减去 2。因此,对于我的第二个列表,我想访问第一个列表中的值 [0,1] 和 [1,0]。我该如何进行?

4

1 回答 1

1

像这样的东西:

>>> lis = [[0, 0], [0, 1], [1, 0], [0, 2], [1, 1], [2, 0], [0, 3], [1, 2], [2, 1], [3, 0]]
>>> lis1 = [[0, 3], [3, 0]]
#generate lis2 from lis1 based on a condition
>>> lis2 = [[y if y!=3 else y-2 for y in x] for x in lis1]
>>> lis2
[[0, 1], [1, 0]]
#use sets to improve time complexity
>>> s = set(tuple(x) for x in lis2)

#Now use set intersection  or a list comprehension to get the
#common elements between lis2 and lis1. Note that set only contains unique items 
#so prefer list comprehension if you want all elements from lis that are in lis2 
#as well.

>>> [x for x in lis if tuple(x) in s]
[[0, 1], [1, 0]]
>>> s.intersection(map(tuple,lis))
{(0, 1), (1, 0)}
于 2013-05-10T11:24:03.733 回答