Есть ли простой способ вывести список в списке в Python?как это [[0,1], [2,3]] - PullRequest
0 голосов
/ 24 июня 2019

Я решил логическую часть следующего упражнения, но не могу найти простое решение для вывода в требуемом формате. Это выглядит как список в списке для меня.

Описание проблемы:

Напишите программу, которая будет принимать строку цифр и даст вам все возможные последовательные фрагменты длины n в этой строке.

Выдает ошибку, если n больше длины строки.

Примеры Например, строка «01234» имеет следующую 2-значную цифру Ломтики:

[[0, 1], [1, 2], [2, 3], [3, 4]]

Эта же строка имеет следующие 4-значные срезы:

[[0, 1, 2, 3], [1, 2, 3, 4]]

Это мой код, который работает нормально, за исключением того, как он возвращает ответ, поэтому не могу отправить его.

digits = "01234"
n = 4
result = [None]*(len(digits)-n+1) #create a list with required size
for x in range(0, len(digits)-n+1):
    result[x] = digits[x:n]
    n += 1
print(result)

Этот код печатает ['0123', '1234'], что является правильным ответом, но я хочу получить его в следующем формате: [[0, 1, 2, 3], [1, 2, 3, 4]]

(edit) добавление этой строки решило мою проблему, предложенную mkrieger1, спасибо Это окончательный код: def series_slices(digits, n): digits = [int(x) for x in digits] result = [] for x in range(0, len(digits)-n+1): result.append(list(digits[x:n])) n += 1 return result

Ответы [ 3 ]

1 голос
/ 24 июня 2019

Просто используйте list в ваших строках:

list('0123')

возвращает

['0', '1', '2', '3']

И преобразовать его в целые числа (спасибо mkrieger, я недостаточно внимательно прочитал вопрос:

Вы можете использовать map, который будет перебирать символы вашей строки и возвращать целое число для каждого, а затем составлять список из объекта карты:

list(map(int, '0123'))
# [0, 1, 2, 3]

или используйте понимание списка:

[int(digit) for digit in '0123'] 
# [0, 1, 2, 3]

В целом, применение list к чему-либо итерируемому вернет список его элементов.

0 голосов
/ 24 июня 2019

Вы можете сделать это с пониманием списка.Первый уровень проходит через размеры, а второй уровень принимает кусочки для этого размера:

digits = "01234"
r=[list(digits[start:][:size+1]) for size in range(len(digits)) for start in range(len(digits)-size)]
print(r)

# [['0'], ['1'], ['2'], ['3'], ['4'], 
#  ['0', '1'], ['1', '2'], ['2', '3'], ['3', '4'], 
#  ['0', '1', '2'], ['1', '2', '3'],['2', '3', '4'], 
#  ['0', '1', '2', '3'], ['1', '2', '3', '4'], 
#  ['0', '1', '2', '3', '4']]
0 голосов
/ 24 июня 2019

измените свой код на result = [] и result.append(list(digits[x:n])) в строке 3 и строке 5.

...