Как разделить список, который имеет ТОЛЬКО ОДНО целочисленное значение в Python?

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

arr = [10]

Массив должен превратиться в:

arr = [1,0]

person User    schedule 25.02.2019    source источник
comment
Это отличается, потому что это не строка, и я должен решить это без встроенной функции.   -  person User    schedule 01.03.2019


Ответы (5)


Используйте понимание списка с двумя итерациями:

>>> [int(x) if x.isdigit() else x for y in arr for x in str(y)]
[1, 0]
>>> 
person U11-Forward    schedule 25.02.2019

Чтобы разделить целое число в таком формате, вы можете использовать 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]
person The Matt    schedule 25.02.2019

Это можно решить, используя карту, список, преобразование в строку, понимание списка.

Если ваш список имеет только одно значение.

Питон 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]))]
person bkawan    schedule 25.02.2019

Вы можете использовать цикл 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]
person blhsing    schedule 25.02.2019

Вы можете использовать либо понимание списка:

[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))]
person iz_    schedule 25.02.2019