如何创建两个值的序列?

时间:2019-01-05 21:15:08

标签: python

我有一个包含不同组合的列表,即:

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

不幸的是,它找不到序列,因为它不是序列。有人对如何解决这个问题有个好主意吗?

4 个答案:

答案 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))

list2tuple转换成listlist1的元素是元组,因此要进行比较,list2必须是tupletuple(list2)[1, 1]变成(1, 1)(与list1的元素相同的类型)。