我的清单如下:
list = [{'a', 'b', 1}, {'x', 'y', 2}]
我有我的变量,我只想匹配前2个字母。
aa = {'x', 'y', 2}
bb = {'x', 'z', 2}
因此,aa
中的list
为True
,但bb
中的list
为False
。
我尝试在{'x', 'y', _}
中使用list
。但这有时会返回True
,有时会返回False
?这可能是因为字母不按顺序排列,因为当我打印list
时,我看到这些字母实际上是随机顺序的?有什么帮助吗?
答案 0 :(得分:2)
我很确定你的意思是处理列表或元组,而不是集合,所以你可以在这里使用itemgetter
:
from operator import itemgetter
first_two = itemgetter(0, 1)
l = [['a', 'b', 1], ['x', 'y', 2]] # list of lists
aa = ['x', 'y', 2]
bb = ['x', 'z', 2]
cc = ('a', 'b', 100)
>>> first_two(aa) in (first_two(x) for x in l)
True
>>> first_two(bb) in (first_two(x) for x in l)
False
>>> first_two(cc) in (first_two(x) for x in l)
True
first_two
是一个itemgetter
,它将返回一个包含给定序列中相应元素的元组。这将使用生成器表达式应用于列表l
中的每个项目,从而提取列表中每个项目的前两个元素。类似地,提取每个变量的前两个元素(aa
,bb
等)。然后比较生成的元组以获得布尔结果。
您可以将其概括为一个函数:
def part_in(value, sequence, getter=None):
if getter is None:
getter = itemgetter(*range(len(value))) # compare on all items
return getter(value) in (getter(x) for x in sequence if len(x) >= len(value))
>>> part_in(aa, l)
True
>>> part_in(aa, l, itemgetter(0, 1))
True
>>> part_in(aa, l, itemgetter(0, 2)) # considers first and third items only
True
最后一个例子表明,选择和比较项目的任何索引都很容易。
答案 1 :(得分:0)
使用功能:
def compare_sequences(main_sequence=None, compared_sequence=None, elements=2):
for seq in main_sequence:
if compared_sequence[:elements] == seq[:elements]:
return True
return False
my_tuples = (('a', 'b', 1), ('x', 'y', 2))
aa = ('x', 'y', 2)
bb = ('x', 'z', 2)
print(compare_sequences(my_tuples, aa, 2))
真