Python 比较排列和组合
我有一个大名单,上面有所有可能的组合Python 比较排列和组合,python,compare,combinations,permutation,Python,Compare,Combinations,Permutation,我有一个大名单,上面有所有可能的组合 items = ["Apple","Banana","Orange","Peach"] combs = [] for c in combinations(items, 2)): combs.append([c[0],c[1]]) 其中: [['Apple', 'Banana'], ['Apple', 'Orange'], ['Apple', 'Peach'], ['Banana', 'Orange'], ['Banana', 'Peach'], [
items = ["Apple","Banana","Orange","Peach"]
combs = []
for c in combinations(items, 2)):
combs.append([c[0],c[1]])
其中:
[['Apple', 'Banana'], ['Apple', 'Orange'], ['Apple', 'Peach'], ['Banana', 'Orange'], ['Banana', 'Peach'], ['Orange', 'Peach']]
用户可以从该列表中输入两项
我想得到列表中所述组合的索引
如果用户按正确的顺序输入,比如“苹果香蕉”,我就可以这样做,但如果是相反的“香蕉苹果”,我就不能这样做。因为没有[香蕉”,“苹果]
我知道我可以在输入中使用排列,因此它同时给出[“香蕉”、“苹果”]和正确的[“苹果”、“香蕉”]。但是,如果不使用嵌套for循环,如何检查一个循环是否在另一个循环中?即使这个小检查也会导致12次迭代
这是嵌套循环:
for pr in permutations([input1, input2], 2):
for comb in combinations(items, 2):
if ..........:
dosomething
你不需要构建所有的组合;您需要的是: 或者,作为生成器表达式:
inputs = {input1, input2}
found = next((i for i, c in enumerate(combinations(items, 2))
if set(c) == inputs), None)
演示:
使用
set
来存储组合怎么样?Martijn得到了正确的答案。好吧,即使我不知道这一点,它也不是我想要的,我需要得到组合的索引。
>>> items = set(["Apple","Banana","Orange","Peach"])
>>> {'Apple', 'Banana'} <= items
True
>>> {'Banana', 'Apple'} <= items
True
>>> {'Banana', 'Watermelon'} <= items
False
inputs = {input1, input2}
found = None
for i, combo in enumerate(combinations(items, 2)):
if set(combo) == inputs:
found = i
break
inputs = {input1, input2}
found = next((i for i, c in enumerate(combinations(items, 2))
if set(c) == inputs), None)
>>> items = ["Apple","Banana","Orange","Peach"]
>>> inputs = {'Banana', 'Apple'}
>>> next((i for i, c in enumerate(combinations(items, 2)) if set(c) == inputs), None)
0