У меня есть строка целых чисел, например s = "1234" Я хочу разделить его на отдельные последовательные комбинации целых чисел split = [ 1234, 1, 2, 3, 4, 12, 123, 23, 234, 34 ] Как я могу написать это на Python?

Что я попробовал:

for i in range(0,len(number)-1):
x =["" + number[j] for j in range(i, len(number))]
print(x)

Выход:

['1', '2', '3', '4', '5']
['2', '3', '4', '5']
['3', '4', '5']
['4', '5']
1
Lau 11 Янв 2017 в 14:23

3 ответа

Лучший ответ

Вы можете использовать combinations из itertools в сочетании с list comprehension:

>>> from itertools import combinations
>>> s = "1234"
>>> [int(''.join(x)) for i in range(len(s)) for x in combinations(s, i + 1)]
[1, 2, 3, 4, 12, 13, 14, 23, 24, 34, 123, 124, 134, 234, 1234]

< Сильный > Обновление Поскольку вам нужны только последовательные комбинации, вы можете использовать все подстроки из строки (используя Как получить все смежные подстроки строки в Python?):

>>> l = len(s)
>>> [int(s[i:j+1]) for i in range(l) for j in range(i,l)]
[1, 12, 123, 1234, 2, 23, 234, 3, 34, 4]
1
Community 23 Май 2017 в 10:30

Вы ищете что-то вроде этого:

stringA = "1234";
lenA = len(stringA);

# Loop through the number of times stringA is long.
for n in range(lenA):
    print("---");
    # Loop through string, print part of the string.
    for x in range(lenA-n):
        print(stringA[n:n + (x+1)])

Я предлагаю взглянуть на подстроки, это то, что я также делаю в моем примере выше.
Ссылка

0
Tenzin 11 Янв 2017 в 12:53

Вам нужны все комбинации, поэтому вы можете использовать itertools.combinations и выражение генератора, чтобы сгенерировать их все:

In [25]: from itertools import combinations
In [26]: list(''.join(sub) for i in range(1, len(s) + 1) for sub in combinations(s, i))
Out[26]: 
['1',
 '2',
 '3',
 '4',
 '12',
 '13',
 '14',
 '23',
 '24',
 '34',
 '123',
 '124',
 '134',
 '234',
 '1234']
2
Kasramvd 11 Янв 2017 в 11:28