【发布时间】:2021-09-07 22:05:06
【问题描述】:
考虑以下列表:
elems = ('banana', 'apple', 'orange', 'melon')
我需要定义一个函数,为一到三个非重复元素的每个有序组合分配一个唯一整数。例如:
banana --> 1
banana, apple --> 2
banana, orange --> 3
banana, melon --> 4
banana, apple, orange --> 5
banana, apple, melon --> 6
banana, orange, apple --> 7
banana, orange, melon --> 8
banana, melon, apple --> 9
banana, melon, orange --> 10
apple --> 11
apple, banana --> 12
apple, orange --> 13
...
我的实际列表包含 20 多个元素,因此无法手动定义整组组合。该函数将输入最少一个和最多三个元素,并按照上述约定返回与它们关联的唯一整数。
我一直在玩 itertools.combinations() 和 itertools.combinations_with_replacement(),但它们没有返回我需要的东西。
【问题讨论】:
-
itertools函数只有在您遍历所有组合/排列/等时才会有所帮助。对于您正在做的事情,您需要根据值确定索引。我只是做数学。首先确定有多少个一、二、三元素序列。然后,根据元素的数量,将先前的计数添加为偏移量。这将问题减少到处理固定数量的元素。然后做同样的事情:确定第一个元素的索引,然后确定需要跳过的数字,等等。有点繁琐,但是很简单。 -
你能分享一下你目前尝试过的代码吗?
-
“告诉我如何解决这个编码问题”是off-topic for Stack Overflow。您应该发送honest attempt at the solution,然后然后在必要时询问有关它的具体问题。
-
我也想过这个问题,Tom,我只是希望 ìtertools 中已经有一个简单的方法。谢谢!
标签: python combinations