【问题标题】:Python Nested For Loops Augmentation Possible?Python 嵌套 For 循环增强可能吗?
【发布时间】:2021-11-05 11:19:34
【问题描述】:

给定一个字符串

abcd

我需要生成以下输出:

['a', 'ab', 'abc', 'abcd', 'b', 'bc', 'bcd', 'c', 'cd', 'd']

我在 Python 3.8 中将以下代码放在一起,它可以工作,但非常笨重且效率低下:

text = 'abcd'
final = [text[y:i+1] for i in range(len(text)) for y in range(len(text)) if len(text[y:i+1]) > 0]
print(sorted(final))

有没有更优雅或更高效的方法来实现所需的输出,而不使用嵌套的 for 循环?

谢谢

【问题讨论】:

    标签: arrays python-3.x string for-loop nested


    【解决方案1】:

    试试:

    s = "abcd"
    
    out = [s[i:j] for i in range(len(s)) for j in range(i + 1, len(s) + 1)]
    print(out)
    

    打印:

    ["a", "ab", "abc", "abcd", "b", "bc", "bcd", "c", "cd", "d"]
    

    编辑:一个循环:

    s = "abcd"
    n = (len(s) * (len(s) + 1)) // 2
    
    out, cnt1, cnt2 = [], 0, 0
    for _ in range(n):
        cnt1 += 1
        out.append(s[cnt2:cnt1])
        if cnt1 > len(s) - 1:
            cnt2 += 1
            cnt1 = cnt2
    
    print(out)
    

    打印:

    ["a", "ab", "abc", "abcd", "b", "bc", "bcd", "c", "cd", "d"]
    

    【讨论】:

    • 谢谢。有没有办法在不使用嵌套循环的情况下实现所需的输出?
    猜你喜欢
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    相关资源
    最近更新 更多