Idiomatische Methode zum Entpacken der Liste variabler Länge der maximalen Größe n

8

Ich lese eine Datei und entpacke jede Zeile wie folgt:

%Vor%

Es ist jedoch möglich, dass die Zeile mehr oder weniger Spalten enthält als die Variablen, die ich entpacken möchte. In dem Fall, wenn es weniger gibt, möchte ich None den dangling Variablen zuweisen, und wenn es mehr gibt, möchte ich sie ignorieren. Was ist der idiomatische Weg, dies zu tun? Ich benutze Python 2.7.

    
pythonic metaphor 10.12.2013, 17:38
quelle

5 Antworten

12

Fix die Länge der Liste, Auffüllen mit None .

%Vor%     
Hyperboreus 10.12.2013, 17:55
quelle
5

In Python 3 können Sie dies verwenden

%Vor%

Bearbeiten

Für große Strings empfehle ich, maxsplit -argument für split zu verwenden (dieses Argument funktioniert auch in py2.7):

%Vor%

Warum 5? Andernfalls würde das vierte Element den gesamten Rest der Zeile enthalten.

Edit2 Es ist 4 ... Es stoppt nach 4 Teilen, nicht 4 Elementen

    
koffein 10.12.2013 17:54
quelle
4

Überlegen Sie zuerst, warum Sie das tun wollen.

Wenn Sie jedoch (1) mit None padieren und (2) zusätzliche Variablen ignorieren möchten, ist der Code einfach:

%Vor%

Offensichtlich muss die magische Zahl mit der Anzahl der Variablen übereinstimmen. Dadurch wird das, was Sie haben, mit der magischen Zahl erweitert und dann auf diese Länge zurückgeschnitten.

Für ein beliebiges iterables können Sie Folgendes tun:

%Vor%

Dies ist das selbe Pad-and-Slice mit itertools.

    
Marcin 10.12.2013 17:57
quelle
-1

Sie müssen möglicherweise eine Klasse erstellen und line.split () als Liste übergeben.

Sie können diese Klasse überschreiben lassen [], aber ich empfehle das nicht. Ich würde self.get_at (self, i) definieren und das Element am Index zurückgeben, oder None, wenn & gt; = len (contents).

Sie können auch eine Funktion definieren, die IndexError abfängt und für eine Liste und einen Index None zurückgibt.

%Vor%

Es ist nicht der sauberste Code, und stattdessen würde ich nur die Verwendung von line.split () empfehlen und die Logik manuell behandeln, abhängig davon, was Sie mit den nachfolgenden Variablen und der Länge der Liste machen.

    
johannestaas 10.12.2013 17:51
quelle
-1

So etwas funktioniert für jeden iterierbaren / Iterator. Wenn Sie immer eine Liste weitergeben, können Sie den islice -Teil entfernen.

%Vor%     
Ashwini Chaudhary 10.12.2013 17:41
quelle

Tags und Links