У меня есть следующий вход:
669 866 147
15 881 210
662 15 70
Используя .split('\n')
, я могу получить список из 3 строк. Затем я хотел бы разбить каждую строку на список строк, а затем преобразовать их в int. Код, который я пытаюсь использовать для этого до сих пор
for tr in numbers:
tr = tr.split()
tr = list(map(int, tr))
Однако после закрытия цикла for ничего не произошло с исходным списком, поэтому, если я выполню эту команду print(type(numbers[0]))
, она вернет <class 'str'>
.
Я предполагаю, что это происходит из-за операции, происходящей внутри цикла, поэтому вне ее ничего не изменилось, так как бы мне сделать так, чтобы оригинальный список тоже обновлялся?
4 ответа
Вам придется явно установить списки обратно в список номеров, прямо сейчас, вы только манипулируете переменной tr с переназначением, чтобы исходный список не пострадал. Попробуйте это вместо
>>> numbers = ["669 866 147", " 15 881 210", "662 15 70"]
>>> for idx, tr in enumerate(numbers):
... tr = tr.split()
... numbers[idx] = list(map(int, tr))
...
>>> numbers
[[669, 866, 147], [15, 881, 210], [662, 15, 70]]
Pythonic мог бы использовать понимание списка - избегая перечисления / индексации, мутации и новой переменной в области видимости:
>>> numbers = ["669 866 147", " 15 881 210", "662 15 70"]
>>> numbers = [map(int, tr.split()) for tr in numbers]
>>> numbers
[[669, 866, 147], [15, 881, 210], [662, 15, 70]]
Некоторые люди избегают встроенной функции map
, и в этом случае вы можете заменить вторую строку следующим:
numbers = [[int(n) for n in tr.split()] for tr in numbers]
Однострочник для этого может быть таким:
In [6]: numbers = "669 866 147\n15 881 210\n662 15 70"
In [7]: [[int(y) for y in x.split()] for x in numbers.split('\n')]
Out[7]: [[669, 866, 147], [15, 881, 210], [662, 15, 70]]
Вы можете назначить In [7] непосредственно обратно на числа или в отдельную новую переменную.
import re
numbers = ["669 866 ASSASSA 147", " 15 881 210", "662 15 70"]
numbers = [[int(_str) for _str in re.findall(r"\d+", o)] for o in numbers]
print numbers
# [[669, 866, 147], [15, 881, 210], [662, 15, 70]]
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.