如何正确使用enumerate函数生成指定字符串组合?
问题解决:用for循环生成字符串组合 & 理解enumerate
先搞懂enumerate到底怎么用
enumerate(可迭代对象) 就是给每个元素绑定一个索引值,默认从0开始,遍历的时候会返回(索引, 元素)的元组。比如你的列表eg = ["A","B","C","D","E"],跑这段代码:
eg = ["A","B","C","D","E"] for idx, val in enumerate(eg): print(idx, val)
输出就是:
0 A 1 B 2 C 3 D 4 E
如果想让索引从1开始,加个start参数就行:enumerate(eg, start=1),这样索引就从1到5了。
需求1:生成连续相邻的组合(['AB', 'BC', 'CD', 'DE'])
不用enumerate也能轻松实现,直接用索引循环就行:
eg = ["A","B","C","D","E"] result = [] # 循环到倒数第二个元素,因为要取i和i+1 for i in range(len(eg)-1): result.append(eg[i] + eg[i+1]) print(result) # 输出: ['AB', 'BC', 'CD', 'DE']
非要用enumerate的话,也可以,只要判断不是最后一个元素:
eg = ["A","B","C","D","E"] result = [] for idx, val in enumerate(eg): # 当索引不是最后一个时,取当前元素+下一个元素 if idx != len(eg)-1: result.append(val + eg[idx+1]) print(result)
需求2:生成所有间隔递增的组合(['AB', 'BC', 'CD', 'DE', 'AC', 'BD', 'CE', 'AD', 'BE', 'AE'])
本质上是要生成所有i < j的两两元素组合,如果你要和例子里的顺序一致(先相邻,再间隔1,再间隔2...),可以按间隔来循环:
eg = ["A","B","C","D","E"] result = [] # 先遍历间隔从1到最大间隔(len(eg)-1) for gap in range(1, len(eg)): # 每个间隔下,遍历起始索引i,保证i+gap不越界 for i in range(len(eg)-gap): result.append(eg[i] + eg[i+gap]) print(result) # 输出: ['AB', 'BC', 'CD', 'DE', 'AC', 'BD', 'CE', 'AD', 'BE', 'AE']
如果不需要严格按间隔排序,只想拿到所有两两组合,用双重循环更直接:
eg = ["A","B","C","D","E"] result = [] # 外层循环每个元素的索引i for i in range(len(eg)): # 内层循环从i+1开始,保证j > i for j in range(i+1, len(eg)): result.append(eg[i] + eg[j]) print(result) # 输出: ['AB', 'AC', 'AD', 'AE', 'BC', 'BD', 'BE', 'CD', 'CE', 'DE']
另外,Python标准库itertools里的combinations可以直接生成两两组合,一行搞定:
from itertools import combinations eg = ["A","B","C","D","E"] result = [''.join(pair) for pair in combinations(eg, 2)] # 要按间隔排序的话,还是用上面的按gap循环的写法
内容的提问来源于stack exchange,提问作者vicefreak04
相关产品推荐
相关产品推荐

