Я хочу разделить значение в списке и сделать его двумя значениями.
arr = [10]
Массив должен превратиться в:
arr = [1,0]
Я хочу разделить значение в списке и сделать его двумя значениями.
arr = [10]
Массив должен превратиться в:
arr = [1,0]
Используйте понимание списка с двумя итерациями:
>>> [int(x) if x.isdigit() else x for y in arr for x in str(y)]
[1, 0]
>>>
Чтобы разделить целое число в таком формате, вы можете использовать str()
, чтобы разделить целое число на его части.
Вам нужно будет сделать это только для переменной, а не для списка. Так
num = arr[0]
а затем превратить это в строку
string = str(num)
который вы можете превратить в список с помощью list()
А затем вы снова превратите несколько строк в числа с помощью int()
Итак, все вместе:
>>> arr = [10]
>>> num = arr[0]
>>> string = str(num)
>>> string_arr = list(string)
>>> arr = list(map(int, string_arr))
>>> arr
[1,0]
Или упростить вместо использования промежуточных переменных.
>>> arr = [10]
>>> arr = list(map(int, str(arr[0])))
>>> arr
[1,0]
Это можно решить, используя карту, список, преобразование в строку, понимание списка.
Если ваш список имеет только одно значение.
Питон 2
arr = [10]
arr = map(int,str(arr[0]))
Питон 3
arr = [10]
arr = list(map(int, str(arr[0])))
Для Python 2 и 3
arr = [10]
arr_str=list(str(arr[0]))
arr = [int(x) for x in arr_str]
один лайнер
arr = [10]
arr = [int(x) for x in list(str(arr[0]))]
Вы можете использовать цикл while
, чтобы продолжать делить заданное целое число на 10 и получать остаток до тех пор, пока частное не станет равным 0, а затем перевернуть полученный список, чтобы получить желаемый список:
def split_int(i):
while True:
i, r = divmod(i, 10)
yield r
if not i:
break
так что list(split_int(arr[0]))[::-1]
возвращает:
[1, 0]
Вы можете использовать либо понимание списка:
[int(digit) for digit in str(arr[0])]
Or list(map())
:
list(map(int, str(arr[0])))
Для наиболее эффективного решения не преобразовывайте в строку; вместо этого используйте основные математические операции:
import math
[arr[0] // 10 ** n % 10 for n in reversed(range(int(math.log10(arr[0])) + 1))]