[('apples, 1,2,3,4,5,6,7,8,9,9,), ('banana, 1,2,46,7,8,5,345,2,1,4,), ('pear, ,7,8,5,6343,23,1,3,5,6,7,7,)]

Die obigen Daten befinden sich in einer externen CSV-Datei. Ich bin fest entschlossen, eine Definition zu schreiben, um diese Daten zu erhalten und eine Liste von Tupeln zu erstellen, die eine Zeichenfolge für den Namen und eine Liste für den Datenpunkt enthält. Die Zeichenfolge und die Liste der Datenpunkte sollten sich im Tupel befinden

So (str,int[]) wie so

1
Ninja 17 Aug. 2015 im 12:07

3 Antworten

Beste Antwort

Dies ist viel besser lesbar als eine einzeilige Lösung!

def list_parser(l):
    for t in l:
        items = t[0].split(", ")
        category = items[0]
        number_strings = items[1:]
        numbers = [float(n) for n in number_strings]
        yield (category, numbers)
3
Tom Dalton 17 Aug. 2015 im 09:24

Hier ist ein Arbeitscode

x=[('apples, 21.72, 29.3, 20.08, 29.98, 29.85, 26.22, 19.99, 27.78, 27.02, 22.44, 26.54, 26.46, 22.24, 27.72, 22.25, 28.52, 25.57, 22.44, 27.06, 24.24, 21.74, 26.72, 27.23, 21.48, 26.14, 21.09, 28.28, 29.05, 23.52, 24.74, 29.08, 21.57, 21.98, 26.66, 21.99, 20.91, 28.07, 26.06, 22.54, 25.9, 21.78, 25.96, 25.25, 28.08, 23.79, 29.99, 21.41, 21.67, 22.94, 29.68',), ('banana, 57.51, 47.59, 55.89, 47.15, 46.71, 51.7, 46.68, 48.36, 52.15, 59.02, 45.1, 45.21, 51.13, 45.27, 57.24, 57.17, 49.47, 46.32, 42.47, 41.14, 46.86, 40.1, 58.67, 48.91, 48.21, 43.63, 43.11, 46.97, 52.07, 47.71, 53.27, 57.54, 56.19, 47.79, 45.32, 50.56, 51.23, 40.6, 48.03, 51.95, 54.54',), ('pear, 75.0, 82.43, 112.11, 89.93, 103.19, 80.6, 113.44, 105.44, 95.54, 121.98, 114.25, 109.84, 90.48, 105.84, 82.89, 113.64, 102.73, 104.57, 100.83, 75.59, 79.86, 91.11, 94.75, 109.89, 117.39, 74.71, 71.04, 92.97, 88.87, 92.95, 86.67, 101.46, 92.4, 85.2, 107.19, 117.81, 90.95, 82.02, 87.31, 106.53, 86.28, 106.62, 107.57, 89.38, 105.88, 74.45, 90.03, 107.96, 77.42, 98.9, 109.81, 102.51, 116.71, 82.92, 81.78, 74.42, 76.27, 73.84, 75.55, 102.29, 108.1, 98.84, 101.48, 77.75, 98.57, 70.31, 78.28, 80.18',)]
print [(i[0].split(",")[0],map(ast.literal_eval,[i.strip() for i in i[0].split(",")[1:]])) for i in x]

Ausgabe:

[('apples', [21.72, 29.3, 20.08, 29.98, 29.85, 26.22, 19.99, 27.78, 27.02, 22.44, 26.54, 26.46, 22.24, 27.72, 22.25, 28.52, 25.57, 22.44, 27.06, 24.24, 21.74, 26.72, 27.23, 21.48, 26.14, 21.09, 28.28, 29.05, 23.52, 24.74, 29.08, 21.57, 21.98, 26.66, 21.99, 20.91, 28.07, 26.06, 22.54, 25.9, 21.78, 25.96, 25.25, 28.08, 23.79, 29.99, 21.41, 21.67, 22.94, 29.68]), ('banana', [57.51, 47.59, 55.89, 47.15, 46.71, 51.7, 46.68, 48.36, 52.15, 59.02, 45.1, 45.21, 51.13, 45.27, 57.24, 57.17, 49.47, 46.32, 42.47, 41.14, 46.86, 40.1, 58.67, 48.91, 48.21, 43.63, 43.11, 46.97, 52.07, 47.71, 53.27, 57.54, 56.19, 47.79, 45.32, 50.56, 51.23, 40.6, 48.03, 51.95, 54.54]), ('pear', [75.0, 82.43, 112.11, 89.93, 103.19, 80.6, 113.44, 105.44, 95.54, 121.98, 114.25, 109.84, 90.48, 105.84, 82.89, 113.64, 102.73, 104.57, 100.83, 75.59, 79.86, 91.11, 94.75, 109.89, 117.39, 74.71, 71.04, 92.97, 88.87, 92.95, 86.67, 101.46, 92.4, 85.2, 107.19, 117.81, 90.95, 82.02, 87.31, 106.53, 86.28, 106.62, 107.57, 89.38, 105.88, 74.45, 90.03, 107.96, 77.42, 98.9, 109.81, 102.51, 116.71, 82.92, 81.78, 74.42, 76.27, 73.84, 75.55, 102.29, 108.1, 98.84, 101.48, 77.75, 98.57, 70.31, 78.28, 80.18])]
0
vks 17 Aug. 2015 im 09:21

Sie möchten ein Listenverständnis verwenden.

[[i[0].split(",")[0], map(float, i[0].split(",")[1:])] for i in lst]
0
muddyfish 17 Aug. 2015 im 09:16