Разделение числа на строку отдельных целых. Объект 'int' не повторяется? - PullRequest
1 голос
/ 20 апреля 2020

Простая проблема.

У меня есть число (целое число):

mynumber = 1239

Я хочу преобразовать его в список отдельных целых чисел, таких как [1,2,3,9]:

numbersplit =  [int(x) for x in mynumber]

Но Я получаю сообщение об ошибке:

TypeError: 'int' object is not iterable

Почему это не работает? Я просто проверяю, что ints на самом деле ints.

Однако он работает, когда я обертываю его в str ..?

[int(x) for x in str(mynumber)]

[1, 2, 3, 9, 8, 9, 8, 7, 2, 3, 9, 4, 7, 8]

Нужно ли преобразовывать списки в строку, прежде чем я смогу это сделать?

Ответы [ 7 ]

1 голос
/ 20 апреля 2020

Когда вы пытаетесь сделать for x in mynumber, вы предполагаете, что mynumber является итеративным, но на самом деле это целое число. Вам нужно набрать приведение типа в str, тогда это можно считать итеративным. Вы можете сделать for x in str(mynumber) - таким образом он даст вам каждый символ в каждой итерации, и вы сможете затем преобразовать каждый символ в целое число. Попробуйте это:

numbersplit =  [int(x) for x in str(mynumber)]
1 голос
/ 20 апреля 2020

Попробуйте это:

[int(i) for i in str(mynumber)]
1 голос
/ 20 апреля 2020

Вы не можете выполнять итерации для int, но вы можете сделать это для строки.

Один из подходов - преобразовать его в строку:

mynumber = 1239
number_str = str(mynumber)

Затем вы можете создать свой список , преобразовав его обратно в int

[int(x) for x in number_str]
0 голосов
/ 20 апреля 2020

целое число не итерируемо, вы можете перебирать его цифры после того, как преобразовали его в строку

list(map(int, str(mynumber)))
0 голосов
/ 20 апреля 2020

Или используйте:

numbersplit = list(map(int, str(mynumber)))

Целые числа не повторяемы. Чтобы узнать, является ли объект повторяемым, попробуйте использовать:

>>> iter(1)
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    iter(1)
TypeError: 'int' object is not iterable
>>> iter('a')
<str_iterator object at 0x000000CE599A40B8>
>>> 

Если выдается ошибка, это означает, что нет не повторяется.

0 голосов
/ 20 апреля 2020

для итераций на итерируемых данных, таких как список, строка, словари и т. Д. c. Объект int не является итеративным типом данных, и мы не можем получить доступ к цифрам int отдельно, так как мы можем получить доступ к строкам или спискам с помощью индексов.

0 голосов
/ 20 апреля 2020

Нужно ли преобразовывать списки в строку, прежде чем я смогу это сделать?

Нет. Вы можете просто перебирать список.

Перебор строки дает вам отдельные буквы, в то время как вы не можете перебрать int.

. Причина, по которой вы можете перебрать строку: потому что Python строка на самом деле является sequence типом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...