2015-11-19 25 views
5

nowicjusz w Pythonie, który napotkał problem z testowaniem równości. Mam listę list, states []; każdy stan zawiera x, w tym konkretnym przypadku x = 3, wartości logiczne. W moim programie generuję listę wartości logicznych, z których pierwsze trzy odpowiadają stanowi [i]. Przeszukuję listę stanów testujących dla równości (jedna z nich jest z pewnością poprawna, ponieważ wszystkie możliwe permutacje binarne są w stanach, ale równość nigdy nie jest wykrywana.Nie ma pojęcia dlaczego, tutaj jest jakiś kod, który zmodyfikowałem, aby go przetestować:Listy są takie same, ale nie są uważane za równe?

temp1 = [] 
for boolean in aggregate: 
    temp1.append(boolean) 
if len(temp1) == len(propositions): 
    break 
print temp1 
print states[0] 
if temp1 == states[0]: 
    print 'True' 
else: 
    print 'False' 

w tym przypadku długość propisitons to 3. wyjście mam z tego kodu jest:

[True, True, True] 
(True, True, True) 
False 

Zgaduję, to ma do czynienia z różnicą w nawiasach to coś wspólnego z faktem? że [0] jest listą na liście? Pozdrawiam:

+3

'states [0]' jest krotką, a nie listą. Smaki Brace/Parens mają duże znaczenie w Pythonie. –

+0

Tak, teraz to widzę. Użyłem wbudowanej funkcji do wypełnienia stanów i nie wiedziałem, że funkcja ta tworzy krotki, a nie listy; Nie wiedziałem nawet o krotkach. Dzięki, będę o tym pamiętać. – Bergy24

Odpowiedz

8

Jesteś c omparing się krotki(True, True, True) przeciwko listy[True, True, True]

Oczywiście są różne.

Spróbuj oddawania list do tuple on-the-go, aby porównać:

temp1 = [] 
for boolean in aggregate: 
    temp1.append(boolean) 
if len(temp1) == len(propositions): 
    break 
print temp1 
print states[0] 
if tuple(temp1) == states[0]: 
    print 'True' 
else: 
    print 'False' 

Albo oddawania tuple do list on-the-go, aby porównać:

temp1 = [] 
for boolean in aggregate: 
    temp1.append(boolean) 
if len(temp1) == len(propositions): 
    break 
print temp1 
print states[0] 
if temp1 == list(states[0]): 
    print 'True' 
else: 
    print 'False' 

Wyjście:

[True, True, True] 
(True, True, True) 
True 
+0

Użyłem wbudowanej funkcji do wypełnienia stanów [], nie wiedziałem, że zostały zrobione krotki; Nigdy wcześniej nie używałam krotek, będę musiał je przeczytać, bardzo dziękuję. – Bergy24

+1

@ Bergy24 Cieszę się, że moja odpowiedź pomogła. Proszę nie zapomnieć o przyjęciu mojej odpowiedzi, jeśli pomogło ci to rozwiązać problem :) –

Powiązane problemy