python - 从 Python 中的排列中删除组合
问题描述
我列出了可用水果数量和农民数量之间的排列。在排列中,它输入(1,2,..,max_number of fruits)和农民数量(3)。这是我使用的代码:
action_list = list(permutations(no_fruits(list), no_farmers(just a number)))
想象一下,有 3 个水果是 3 个农民。1 号水果是苹果,2 号是另一个苹果,3 号是芒果。例如,对象 1.fruit= apple 中包含的水果信息。我已经有一个 lis 说明哪些数字具有相同的水果。我们有这 6 种组合: (1,2,3) (1,3,2) (2,1,3) (2,3,1) (3,1,2) (3,2,1)
但现在我不想区分苹果 1 和苹果 2。所以最终输出应该是: (1,2,3) (1,3,2) (3,1,2)
如何删除其他组合?换句话说,如何删除只有 1 号水果和 2 号水果相互交换位置的组合?
其他相关信息:农民的数量可能优于可用水果的数量。在这种情况下,会有一些农民没有水果,会被表示为“-”。这是一个例子:
(1,2,-)
这意味着农夫 3 没有水果,而农夫 1 和农夫 2 分别有水果 1 和 2。
解决方案
我还没有完全掌握。然而,这里有一个更新的代码来处理水果和农民之间的不匹配,但需要两个迭代:
def customZip(*obj):
while any(obj):
yield ([i.pop(0) if i else '-' for i in obj])
def permutation(fruits, farmers):
populate = []
for i in customZip(fruits, farmers):
populate.append(i)
def _permutation(obj, _len):
if len(obj) == 1:
yield obj
else:
l = []
for i in range(len(obj)):
for j in _permutation(obj[:i] + obj[i+1:], _len):
alt = obj[i:i+1] + j
if len(alt) != _len:
yield alt
else:
res = [i[0] for i in alt]
if res not in l:
l.append(res)
yield ([i[1] for i in alt], res)
for j in _permutation(populate, len(populate)):
yield j
for i in permutation(fruits, farmers):
print(i)
#1
farmers = [1, 2, 3]
fruits = ['apple', 'apple', 'melon']
([1, 2, 3], ['apple', 'apple', 'melon'])
([1, 3, 2], ['apple', 'melon', 'apple'])
([3, 1, 2], ['melon', 'apple', 'apple'])
[Finished in 0.2s]
#2
farmers = [1, 2, 3]
fruits = ['apple', 'melon']
([1, 2, 3], ['apple', 'melon', '-'])
([1, 3, 2], ['apple', '-', 'melon'])
([2, 1, 3], ['melon', 'apple', '-'])
([2, 3, 1], ['melon', '-', 'apple'])
([3, 1, 2], ['-', 'apple', 'melon'])
([3, 2, 1], ['-', 'melon', 'apple'])
[Finished in 0.2s]
推荐阅读
- firefox - Firefox WebIDE 中禁用了播放(安装和运行)按钮
- apache - 在 Grafana 中单点登出
- python - 为什么有分号;在 matplotlibs plot() 函数之后?
- enterprise-architect - 我在哪里可以找到 Enterprise Architect MDG Object Tag Guid?
- angularjs - TypeError: a.DataTable 不是函数;来自 angular-datatables.min.js
- python - 有没有办法在交互后重置 Mayavi 场景?
- python-3.x - 如何获取字符串日期输入并将其转换为另一种格式?
- c++ - 在 macOS 中处理 VBI 数据
- sql - 如何在带有“时间”字段的 postgresql 中按天和 2 小时分组?
- python - 从 Entry 检测意图而不是手动 Dialogflow 输入