2017-01-20 3 views
1

So. У меня есть список, содержащий спискиИзменение списков в списках с использованием учета по спискам

>>> f[:10] 
[['-340', '495', '-153', '-910', '835', '-947'], ['-175', '41', '-421', '-714', '574', '-645'], ['-547', '712', '-352', '579', '951', '-786'], ['419', '-864', '-83', '650', '-399', '171'], ['-429', '-89', '-357', '-930', '296', '-29'], ['-734', '-702', '823', '-745', '-684', '-62'], ['-971', '762', '925', '-776', '-663', '-157'], ['162', '570', '628', '485', '-807', '-896']] 

Я хочу изменить каждое значение в каждом из списков в главном списке на междунар. Другими словами, я хочу закончить с этим

>>> f[:10] 
[[-340, 495, -153, -910, 835, -947], [-175, 41, -421, -714, 574, -645], [-547, 712, -352, 579, 951, -786], [419, -864, -83, 650, -399, 171], [-429, -89, -357, -930, 296, -29], [-734, -702, 823, -745, -684, -62], [-971, 762, 925, -776, -663, -157], [162, 570, 628, 485, -807, -896]] 

Теперь я могу легко сделать это с помощью следующего кода:

for x in range(len(f)): 
    for y in range(6): 
     f[x][y] = int(f[x][y]) 

Но я хотел бы знать, если я мог бы сделать это, используя список понимание , Я попытался следующий код

f = [int(x) for y in f for x in y] 

но результаты в одном большом списке

>>> f[:10] 
[-340, 495, -153, -910, 835, -947, -175, 41, -421, -714] 

Каждый знает, как достичь желаемого результата, используя список понимание?

+1

Это потому, что вы используете понимание вложенного списка. преобразуйте элементы в подсписке, вместо этого, как '[[int (x) для x в sub] для sub в f]'. – Kasramvd

+0

@ Kasramvd То, что я хотел, спасибо. –

ответ

2

С f в качестве стартового списка, используйте вложенное понимание:

>>> import pprint 
>>> result = [[int(x) for x in l] for l in f] 
>>> pprint.pprint(f) 
[['-340', '495', '-153', '-910', '835', '-947'], 
['-175', '41', '-421', '-714', '574', '-645'], 
['-547', '712', '-352', '579', '951', '-786'], 
['419', '-864', '-83', '650', '-399', '171'], 
['-429', '-89', '-357', '-930', '296', '-29'], 
['-734', '-702', '823', '-745', '-684', '-62'], 
['-971', '762', '925', '-776', '-663', '-157'], 
['162', '570', '628', '485', '-807', '-896']] 
>>> pprint.pprint(result) 
[[-340, 495, -153, -910, 835, -947], 
[-175, 41, -421, -714, 574, -645], 
[-547, 712, -352, 579, 951, -786], 
[419, -864, -83, 650, -399, 171], 
[-429, -89, -357, -930, 296, -29], 
[-734, -702, 823, -745, -684, -62], 
[-971, 762, 925, -776, -663, -157], 
[162, 570, 628, 485, -807, -896]] 

Или list и map:

>>> result = [list(map(int, l)) for l in f] 
>>> pprint.pprint(result) 
[[-340, 495, -153, -910, 835, -947], 
[-175, 41, -421, -714, 574, -645], 
[-547, 712, -352, 579, 951, -786], 
[419, -864, -83, 650, -399, 171], 
[-429, -89, -357, -930, 296, -29], 
[-734, -702, 823, -745, -684, -62], 
[-971, 762, 925, -776, -663, -157], 
[162, 570, 628, 485, -807, -896]] 
+0

OP говорит, что они хотят изменить существующий список, а не строить новый; мог бы присваивать 'f [:]' конечно –

+0

@Chris_Rands - они явно в порядке с созданием нового: 'f = [int (x) для y в f для x в y]' в вопросе. – TigerhawkT3

+0

Возможно, но с их циклами 'for' они изменяют существующий список. Если они хотят новый список, это точная ошибка ... http://stackoverflow.com/questions/18072759/python-nested-list-comprehension –

Смежные вопросы