【问题标题】:Break a string into sequential substrings? [duplicate]将字符串分解为连续的子字符串? [复制]
【发布时间】:2017-10-18 14:08:07
【问题描述】:

我有一个字符串“香蕉”。我想生成所有可能的顺序子字符串的列表:

[B, BA, BAN, BANA, BANAN, BANANA, A, AN, ANA, ...]

这是我可以使用 Python List Comprehension 完成的,还是我会以蛮力的方式生成它们?注意:我是 Python 新手。 TIA

【问题讨论】:

  • 抱歉...我没有搜索正确的关键字。但是感谢您的反对。
  • 哦,我没有投反对票,我所做的只是列出了重复项,我通常不反对重复项

标签: python string


【解决方案1】:

使用列表理解:

s = "BANANA"
l = len(s)
ar = [s[j:] for i in range(l) for j in range(i,l)]
print(*ar)

使用嵌套循环:

s = "BANANA"
l = len(s)
ar = []
for i in range(l):
    for j in range(i,l):
        ar.append(s[j:])
print(*ar)

两个输出:

BANANA ANANA NANA ANA NA A ANANA NANA ANA NA A NANA ANA NA A ANA NA A NA A A

注意:itertools 已经在 A.J. 的回答中进行了解释。

【讨论】:

    【解决方案2】:

    使用itertools 尝试以下操作:

    str = "BANANA"
    all = [[''.join(j) for j in itertools.product(str, repeat=i)] for i in range(1, len(str)+1)]
    

    >>> all[0]
    ['B', 'A', 'N', 'A', 'N', 'A']
    >>> all[1]
    ['BB', 'BA', 'BN', 'BA', 'BN', 'BA', 'AB', 'AA', 'AN', 'AA', 'AN', 'AA', 'NB', 'NA', 'NN', 'NA', 'NN', 'NA', 'AB', 'AA', 'AN', 'AA', 'AN', 'AA', 'NB', 'NA', 'NN', 'NA', 'NN', 'NA', 'AB', 'AA', 'AN', 'AA', 'AN', 'AA']
    >>> 
    

    【讨论】:

      【解决方案3】:

      如果你想要所有可能的子列表,你可以使用两个 for in one list comprehension:

      def sublists(lst):
          return [lst[m:n+1] for m in range(0,len(lst)+1) for n in range(m,len(lst)+1)]
      
        sublists("banana")
      => ['b', 'ba', 'ban', 'bana', 'banan', 'banana', 'banana', 'a', 'an', 'ana', 'anan', 'anana', 'anana', 'n', 'na', 'nan', 'nana', 'nana', 'a', 'an', 'ana', 'ana', 'n', 'na', 'na', 'a', 'a', '']
      

      如果你不想重复元素:

      def sublistsWithoutRepeated(lst):
        return list(set(sublists(lst)))
      
        sublistsWithoutRepeated("banana")
      => ['a', '', 'b', 'ba', 'nana', 'na', 'nan', 'an', 'anana', 'anan', 'n', 'bana', 'ban', 'banan', 'banana', 'ana']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-28
        • 2019-05-22
        • 2016-12-01
        • 2011-11-25
        相关资源
        最近更新 更多