我有以下简洁的(和工作)方法来获取字符串列表的所有前向排列。因此,在清单上:
W= “车辆”、“Sem”、“Risus”、“Tortor
其结果应是:
“Vehicula”、“Vehicula Sem”Sem“、”Vehicula Sem Risus“、”Vehicula Sem Risus Tortor“、”Sem“、”Sem Risus“、”Sem Tortor“、”Risus“、”Risus Tortor“、”Tortor
为此,我们循环遍历每个元素,并执行一个内部循环,该循环向前看,并将其余元素的切片保存到结果数组中。
w = ["Vehicula", "Sem", "Risus", "Tortor"]
results = []
i = 0
l = len(w)
while i < l:
    j, k = i, i + 1
    while k <= l:
        results.append(" ".join(w[j:k]))    
        k = k + 1
    i = i + 1
print results使用Python时,我总是觉得自己错过了一个技巧,所以我很好奇,看看是否有任何本地Python函数可以提高效率?
我用timeit测试了这三个测试,我的测试肯定是最慢的。我要和itertools打交道--它非常强大。
Verbose (Mine): 3.61756896973
Comprehensions: 3.02565908432
Itertools: 2.83112883568发布于 2012-11-15 13:18:20
下面是一种使用itertools.combinations生成(开始、结束)对的替代方法:
from itertools import combinations
w = "Vehicula Sem Risus Tortor".split()
results = [' '.join(w[i:j]) for i, j in combinations(range(len(w) + 1), 2)]发布于 2012-11-15 13:04:19
这应该能行。不过,我不知道它是否比您的方法更易读。
w = ["Vehicula", "Sem", "Risus", "Tortor"]
results = [' '.join(w[i:i+j+1]) for i in range(len(w)) for j in range(len(w)-i)]https://codereview.stackexchange.com/questions/18656
复制相似问题