2017-02-16 4 views
2

Ich bin vor kurzem zufällig auf dieses Verhalten in Python gestoßen. Könnte jemand erklären, warum das Durchschleifen durch eine list of lists sowie eine Komma getrennte Listen zum gleichen Ergebnis führen.Python loop das gleiche Ergebnis für die Liste der Listen und durch Komma getrennte Listen

# comma separated lists 
values = ['cat','fish'], ['cat','fish','monkey'], ['cat','fish','monkey','fish'] 
for v in values: 
    print(v) 

# List of lists 
values = [['cat','fish'], ['cat','fish','monkey'], ['cat','fish','monkey','fish']] 
for v in values: 
    print(v) 
+5

Da im ersten Fall Werte als 'Tupel' angenommen werden, können Sie ein Tupel von Listen auf die gleiche Weise durchlaufen, wie Sie eine Liste von Listen durchlaufen. einfach 'print (type (values))' und du wirst sehen. –

+0

'print (values)' in jedem Fall - Sie werden sehen, die erste erstellt ein Tupel. – asongtoruin

Antwort

9

Wenn Sie Werte trennen, interpretiert Python dies als ein Tupel. So Ihre erste Aussage ist äquivalent zu:

values = (['cat','fish'], ['cat','fish','monkey'], ['cat','fish','monkey','fish']) 

wie eine Liste, ein Tupel iterable über seine Elemente (das sind wieder ['cat','fish'], etc.)

so für die v in der for Schleife, ändert sich nichts .

Der einzige Unterschied besteht darin, dass ein Tupel unveränderlich, so dass Sie können nicht hinzufügen/entfernen Elemente zum ersten values, noch können Sie gesetzt die Elemente values (Sie können jedoch Anrufe auf den einzelnen Listen durchführen).

+1

Vielen Dank Williem Van Onsem! –

5

das Komma getrennte Listen in der Tat ist ein Tupel:

>>> values = ['cat','fish'], ['cat','fish','monkey'], ['cat','fish','monkey','fish'] 
>>> values 
(['cat', 'fish'], ['cat', 'fish', 'monkey'], ['cat', 'fish', 'monkey', 'fish']) 
>>> type(values) 
<type 'tuple'> 

Da Tupel iterable sind, erhalten Sie das gleiche Ergebnis.

+0

Vielen Dank @fredtantini –

4

Grundsätzlich, wenn die Listen von comas trennt Sie ein Tupel bauen kann Wich iteriert werden:

values = ['cat','fish'], ['cat','fish','monkey'], ['cat','fish','monkey','fish'] 
values 
(['cat','fish'], ['cat','fish','monkey'], ['cat','fish','monkey','fish']) 
+0

Danke Daniel Sanchez! –

0

Zuerst ein als Tupel behandelt und zweite ist die Liste. Beide sind für eine Schleife iterierbar.

# comma separated lists 
    values = ['cat','fish'], ['cat','fish','monkey'],['cat','fish','monkey','fish'] 
    print(type(values)) 
    # Output will be <type 'tuple'> 

    # List of lists 
    values = [['cat','fish'], ['cat','fish','monkey'], `enter code here`['cat','fish','monkey','fish']] 
    print(type(values)) 
    # Output will be <type 'list'>