Mam zagnieżdżoną listę, która zawiera liczbę całkowitą jako ostatni element każdej listy, a ja próbuję sprawdzić, czy następny element na liście jest jeszcze jeden niż bieżący element, tj. Jeśli ostatni element bieżącej listy wynosi 104, Jeśli ostatni element następnej listy wynosi 105, zrób coś.

data=[[a,b,c,1200],[a,g,x,3401],[f,a,c,3402],[f,a,c,3403]etc]
for item in data:
    if next(item[-1])==item[-1]+1: #if next item is this item plus one
        #do something

To utrzymuje podnoszenie TypeError: Can't convert 'int' object to str implicitly i nie wiem dlaczego. Czy istnieje sposób korzystania z dodatku do porównania elementów listy w Pythonie, o której nie jestem świadomy?

(Następna (pozycja) część może nie być dokładna, ponieważ używam funkcji, aby uzyskać poprzednie i następne elementy w pełnym kodzie, a nie następny (), ale jest tak samo zasada)

0
Snaaa 3 sierpień 2012, 15:41

2 odpowiedzi

Komunikat o błędzie jest spowodowany faktem, że użyłeś item[1], gdzie wydaje się, aby zamieścić item[-1]. Jednak naprawienie tego nie naprawia kodu - {x2}} nie ma sensu. Proponowałem zrefleksować tę pętlę za pomocą itertools.groupby():

from itertools import groupby, count
c = count()
for key, group in groupby(data, lambda x: x[-1] - next(c)):
    for item in group:
        # whatever

Spowoduje to podział data na grupy ciągłych biegów liczb całkowitych w ostatnim elemencie supliści. Każda pętla wewnętrzna będzie przebiegać przez osobny ciągły bieg, a następnie można dodać kod konfiguracji przed tym wewnętrzną pętlę w razie potrzeby.

2
Sven Marnach 3 sierpień 2012, 11:47

Musisz prawidłowo przekonwertować swoje typy.

if int(next(item[-1])) == int(item[1]) + 1:

Nie wyrażam również zrozumienia, dlaczego nie tylko

 if int(item[0]) == int(item[1]) + 1:

Bądź przygotowany na złapanie ValueError, jeśli konwersja się nie powiedzie.

0
pyrospade 3 sierpień 2012, 11:51