2015-11-19 16 views
5

novizio su Python che incontra un problema di test per l'uguaglianza. Ho una lista di liste, stati []; ogni stato contiene x, in questo caso specifico x = 3, valori booleani. Nel mio programma, creo un elenco di valori booleani, i primi tre dei quali corrispondono a uno stato [i]. Eseguo il ciclo dell'elenco di stati che testano l'uguaglianza (uno di essi è sicuramente corretto poiché tutte le possibili permutazioni booleane si trovano negli stati, ma l'uguaglianza non viene mai rilevata.) No indizio del perché, ecco un codice che ho modificato per testarlo:Le liste sono uguali ma non sono considerate uguali?

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' 

in questo caso, la lunghezza del propisitons è 3. l'uscita che ricevo da questo codice è:

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

sto indovinando questo ha a che fare con la differenza tra parentesi Qualcosa a che fare con il fatto? che afferma [0] è una lista in un elenco? Cheers.

+3

'stati [0]' è una tupla, non una lista. I sapori di parentesi graffe/parenti sono molto importanti in Python. –

+0

Sì, lo vedo ora. Avevo usato una funzione built-in per popolare gli stati e non sapevo che quella funzione creava tuple e non liste; Non sapevo nemmeno delle tuple. Grazie, lo terrò a mente. – Bergy24

risposta

8

Sei c omparing un tupla(True, True, True) contro un lista[True, True, True]

Naturalmente sono diversi.

Prova a trasmettere il vostro list-tuple on-the-go, per confrontare:

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' 

o lanciare il vostro tuple-list on-the-go, per confrontare:

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' 

Uscita:

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

Ho usato una funzione incorporata per popolare gli stati [], non sapevo che venissero create delle tuple; Non ho mai nemmeno usato tuple prima, dovrò leggerle, grazie molte. – Bergy24

+1

@ Bergy24 Sono contento che la mia risposta sia stata d'aiuto. Per favore, non dimenticare di accettare la mia risposta se ti ha aiutato a risolvere il problema :) –

Problemi correlati