2012-07-22 77 views
0

是否可以用列表理解表達式替換下面的代碼?嵌套列表理解等效

input = ['1\t2,3\t4,5', '61\t7,8\t9,0'] 

res = [] 
li = [i.split() for i in input] 
for i in li: 
    l = [i[0]] 
    l = l + [e.split(',') for e in i[1:]] 
    res.append(l) 

問題是每個子列表中的第一個元素應該與其餘元素區別對待。

回答

2

我不得不說這不是Pythonic考慮可讀性的原因。

>>> l = ['1\t2,3\t4,5', '61\t7,8\t9,0'] 
>>> [[i[0]]+[e.split(',') for e in i[1:]] for i in [x.split() for x in l]] 
[['1', ['2', '3'], ['4', '5']], ['61', ['7', '8'], ['9', '0']]] 
+0

那麼這將是這樣做的更pythonic的方法? – Max 2012-07-22 09:21:15

+1

我的意思是考慮可讀性。關於你的方式,沒有什麼「非pythonic」,除非我可能不會在你的循環中創建中間列表。 – 2012-07-22 09:46:39

+0

您可以使用'i [:1]'而不是'[i [0]]' – jamylak 2012-07-22 10:19:19

1
>>> input = ['1\t2,3\t4,5', '61\t7,8\t9,0'] 
>>> 
>>> [[a.split()[0]] + [b.split(',') for b in a.split()[1:]] for a in input] 
[['1', ['2', '3'], ['4', '5']], ['61', ['7', '8'], ['9', '0']]] 
0
>>> import csv 
>>> data = ['1\t2,3\t4,5', '61\t7,8\t9,0'] 
>>> [x[:1] + list(csv.reader(x[1:], delimiter=',')) 
    for x in csv.reader(data, delimiter='\t')] 
[['1', ['2', '3'], ['4', '5']], ['61', ['7', '8'], ['9', '0']]]