2017-01-11 1 views
1

У меня есть целая цепочка, например. 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'] 
+0

Есть * дубликаты * разрешено? Каков ответ, скажем, '1212'? Являются ли это [1212, 121, 212, 12, 21, 12, 1, 2, 1, 2] 'или' [1212, 121, 212, 12, 21, 1, 2] ''? –

+1

Возможный дубликат [Как получить все возможные комбинации элементов списка?] (Http://stackoverflow.com/questions/464864/how-to-get-all-possible-combinations-of-a-list-s- элементы) – fredtantini

+0

Прошу прощения за то, что я недостаточно четко сформулировал свой вопрос, но мне нужны комбинации, которые должны быть последовательными в комбинациях '1234' для' 2', должны быть только '23, 234', игнорируя' 21 и 24' – Wideem

ответ

1

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

обновление Как вам нужно только последовательные комбинации, вы можете использовать все подстроки из строки (с помощью How To Get All The Contiguous Substrings Of A String In 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] 
2

Вам нужно все комбинации, так что вы можете использовать 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'] 
+0

Спасибо за ответ, но мне действительно нужен был список последовательных комбинаций, поэтому элементы «13, 14, 134» и т. д. должны быть проигнорированы в моем случае – Wideem

0

Вы ищете somethng, как это :

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)]) 

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

 Смежные вопросы

  • Нет связанных вопросов^_^