首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取字符串列表的所有(前向)排列

获取字符串列表的所有(前向)排列
EN

Code Review用户
提问于 2012-11-15 12:50:35
回答 2查看 3.9K关注 0票数 3

我有以下简洁的(和工作)方法来获取字符串列表的所有前向排列。因此,在清单上:

W= “车辆”、“Sem”、“Risus”、“Tortor

其结果应是:

“Vehicula”、“Vehicula Sem”Sem“、”Vehicula Sem Risus“、”Vehicula Sem Risus Tortor“、”Sem“、”Sem Risus“、”Sem Tortor“、”Risus“、”Risus Tortor“、”Tortor

为此,我们循环遍历每个元素,并执行一个内部循环,该循环向前看,并将其余元素的切片保存到结果数组中。

代码语言:javascript
运行
复制
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打交道--它非常强大。

代码语言:javascript
运行
复制
Verbose (Mine): 3.61756896973
Comprehensions: 3.02565908432
Itertools: 2.83112883568
EN

回答 2

Code Review用户

回答已采纳

发布于 2012-11-15 13:18:20

下面是一种使用itertools.combinations生成(开始、结束)对的替代方法:

代码语言:javascript
运行
复制
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)]
票数 5
EN

Code Review用户

发布于 2012-11-15 13:04:19

这应该能行。不过,我不知道它是否比您的方法更易读。

代码语言:javascript
运行
复制
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)]
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/18656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档