【问题标题】:Split string of integers to all possible list of numbers将整数字符串拆分为所有可能的数字列表
【发布时间】:2017-05-26 04:04:15
【问题描述】:

我有一串整数,例如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']

【问题讨论】:

  • 是否允许重复?例如,1212 的回答是什么?是 [1212, 121, 212, 12, 21, 12, 1, 2, 1, 2]` 还是 [1212, 121, 212, 12, 21, 1, 2]
  • 我很抱歉没有让我的问题足够清楚,但我需要在字符串1234 中连续组合2 的组合应该只是23, 234 忽略21 and 24

标签: python string list python-3.x split


【解决方案1】:

您可以将itertools 库中的combinationslist 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']
    

    【讨论】:

    • 感谢您的回答,但我真正需要的是顺序组合列表,因此在我的情况下应该忽略元素 13, 14, 134
    【解决方案3】:

    您是否正在寻找这样的东西:

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

    我建议查看子字符串,这也是我在上面的示例中所做的。
    Link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多