我有一个包含不同组合的列表,即:
list1 = [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
我还有另外一个列表,例如:
list2 = [1,1]
我想做的是取list2
的两个值,将它们作为(1,1)
放在一起,然后将它们与list1
中的元素进行比较,然后返回索引。我目前的尝试看起来像这样:
def return_index(comb):
try:
return comb_leaves.index(comb)
except ValueError:
print("no such value")
不幸的是,它找不到序列,因为它不是序列。有人对如何解决这个问题有个好主意吗?
答案 0 :(得分:4)
您正在将“序列”与“元组”混淆。列表和元组都是序列。非正式地,序列是任何具有长度的东西,除了可迭代之外,还支持直接索引。例如,range
对象也被认为是一个序列。
要从任何其他序列创建两个元素元组,请使用构造函数:
test_element = tuple(list_2)
答案 1 :(得分:1)
list3 = tuple(list2)
print(list3 in list1) #Check if it exists.
答案 2 :(得分:1)
list1 = [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
list2 = [1,1]
tup2 = tuple(list2)
list1.append(tup2)
print('list1:',list1)
print('index:', list1.index(tup2))
会给出这个:
list1: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2), (1, 1)]
index: 4
不确定是否要无条件添加tup2
。
如果第二个列表在list1中,也许您要索要索引:
list1 = [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]list2 = [1,1]
tup2 = tuple(list2)
if tup2 in list1:
print('index:', list1.index(tup2))
else:
print('not found')
给出:
index: 4
index
函数返回匹配的第一个元素。
答案 3 :(得分:1)
尝试一下:
list1 = [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
list2 = [1, 1]
def return_index(comb):
try:
return list1.index(tuple(comb))
except ValueError:
print("Item not found")
print(return_index(list2)) # 4
此行:
list1.index(tuple(list2))
将list2
从tuple
转换成list
。 list1
的元素是元组,因此要进行比较,list2
必须是tuple
。 tuple(list2)
将[1, 1]
变成(1, 1)
(与list1
的元素相同的类型)。