Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较排列和组合_Python_Compare_Combinations_Permutation - Fatal编程技术网

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