Разбить список на парные элементы

ListWithCortege = [(2, 4, 2, 1, 0), (4, 2, 1, 0), (1, 1, 0), (4, 1), (1, 4, 1)]
for item in ListWithCortege:
    print(item)
    for element in item[0:2]:
        print(element)
dict = {
(2,4):'1',
(4,2):'2',
(2,1):'3',
(1,0):'4',
(1,1):'5',
(4,1):'6'
}

Вывод:

(2, 4, 2, 1, 0)
2
4
(4, 2, 1, 0)
4
2
(1, 1, 0)
1
1
(4, 1)
4
1
(1, 4, 1)
1
4

Подскажите пожалуйста как из элементов кортежа получить поочередные пары чисел? [((2,4),(4,2),(2,1),(1,0)), ((4,2),(2,1),(1,0)), ((1,1),(1,0)), (4,1), ((1,4),(4,1)) )] и можно ли их потом сравнить со значениями ключей словаря?


Ответы (1 шт):

Автор решения: n1tr0xs

Можно использовать zip:

ListWithCortege = [(2, 4, 2, 1, 0), (4, 2, 1, 0), (1, 1, 0), (4, 1), (1, 4, 1)]

result = []
for cort in ListWithCortege:
    result.append(tuple(zip(cort, cort[1:])))

print(result)

UPD (работает если окажется, что в списке число

for cort in ListWithCortege:
    try:
        result.append(tuple(zip(cort, cort[1:])))
    except TypeError:
        result.append(tuple([cort])) # тут напишите действия, которые нужно сделать, если элемент один.

UPD 2 работает с одноэлементным кортежом, добавляя парное значение:

for cort in ListWithCortege:
    if len(cort)==1:
        result.append(tuple((cort[0], -1)))
    else:
        result.append(tuple(zip(cort, cort[1:])))
→ Ссылка