2013-04-05 3 views
0

['136 145', '136 149', '137 145', '138 145', '139 145', '142 149', '142 153', '145 153'] С моим списком наверху я хочу превратить элементы в ints, я знаю, что просто использование [int(x) for x in mylist] не будет работать. Поэтому мой вопрос в том, как вы переводите список, который у меня есть, в список ints.Список строк в ints ['123 121', '42 23', '23 23']

+0

каждый элемент в списке represends 2 Интс ... –

+3

Какой выход вы хотите? – mgilson

ответ

2

Разделить текст первого, затем новообращенный INT:

[map(int, elem.split()) for elem in originallist] 

Для Python 3, где map() возвращает генератор, а не список, вы можете вложить в список понимание:

[[int(n) for n in elem.split()] for elem in originallist] 

, который будет работать одинаково хорошо под Python 2.

Быстрая демонстрация:

>>> originallist = ['136 145', '136 149', '137 145', '138 145', '139 145', '142 149', '142 153', '145 153'] 
>>> [[int(n) for n in elem.split()] for elem in originallist] 
[[136, 145], [136, 149], [137, 145], [138, 145], [139, 145], [142, 149], [142, 153], [145, 153]] 

Вы можете удалить вложение, перемещая elem.split() петлю к наружному списка понимания, до конца:

[int(n) for elem in originallist for n in elem.split()] 

, который дает:

[136, 145, 136, 149, 137, 145, 138, 145, 139, 145, 142, 149, 142, 153, 145, 153] 
3
>>> L = ['136 145', '136 149', '137 145', '138 145', '139 145', '142 149', '142 153', '145 153'] 
>>> [int(y) for x in L for y in x.split()] 
[136, 145, 136, 149, 137, 145, 138, 145, 139, 145, 142, 149, 142, 153, 145, 153] 
1

Как я склонен пойдите в большую длину, чтобы избежать вложенных списков (я никогда не помню порядок), я бы сделал что-то вроде:

from itertools import chain 
x = ['136 145', '136 149', '137 145', '138 145', '139 145', '142 149', '142 153', '145 153'] 
gen = chain.from_iterable(elem.split() for elem in x) 
integers = [int(elem) for elem in gen] 
+0

Я думаю, что мне нравится только «chain.from_iterable», когда он окружает все выражение – jamylak

1

Вы можете попробовать, как это,

>>> import re 
>>> l=['136 145', '136 149', '137 145', '138 145', '139 145', '142 149', '142 153', '145 153']  
>>> map(int, re.findall(r'\d+',' '.join(l))) 
[136, 145, 136, 149, 137, 145, 138, 145, 139, 145, 142, 149, 142, 153, 145, 153] 
+0

Вам не нужно регулярное выражение для этого подхода – jamylak

0
>>> L = ['136 145', '136 149', '137 145', '138 145', '139 145', '142 149', '142 153', '145 153'] 
>>> map(int, ' '.join(L).split()) 
[136, 145, 136, 149, 137, 145, 138, 145, 139, 145, 142, 149, 142, 153, 145, 153]