尝试迭代所有组合,但得到重复的

2024-09-29 23:20:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从武器,盔甲,饰品,宠物列表中生成所有可能的组合。你知道吗

我需要他们在3套,意思是3个“球员”,每个人都有一个以上的项目,没有球员可以有同一个项目作为另一个球员。你知道吗

我试图从给定的选项中生成3个玩家可以拥有的所有组合,目的是运行一个函数,最终确定哪个项目分布将在游戏中产生最佳结果。你知道吗

我有一些代码在工作,但是我得到了重复的项,就像在我的示例代码中,您在combol[0]中看到的那样,它们都有相同的斧头,这就是我试图避免的。你知道吗

import random

def grand():
  return random.randrange(0, 10000)

weapons = [
  ["Ad axe", "Axe", grand() , grand(), grand()],
  ["Stinky sword", "Sword", grand(), grand(), grand()],
  ["Purple Magic Stick", "Staff", grand(), grand(), grand()]
  ]

armor = [
  ["Purple Blazer", grand(), grand(), grand()],
  ["Stinky Coat", grand(), grand(), grand()],
  ["Red Robe", grand(), grand(), grand()]
]

trinkets = [
  ["Moist Coin", grand(), grand(), grand()],
  ["Stinky Chowder", grand(), grand(), grand()],
  ["Red Rock", grand(), grand(), grand()]
]

pets = [
  ["Moist Dragon", grand(), grand(), grand()],
  ["Stinky Cat", grand(), grand(), grand()],
  ["Red Racoon", grand(), grand(), grand()]
]

import itertools

perm = itertools.product(weapons,armor,trinkets,pets)
perml = list(perm)
combo = itertools.permutations(perml,3)
combol = list(combo)

print len(perml)
print len(combol)

def forx(pants):
  for x in pants:
    print x

def inspector(pants):
  for x in pants:
    forx(x)
    print ""

print "combol[0]"
inspector(combol[0])
print "combol[1]"
inspector(combol[1])
combol[0]
['Ad axe', 'Axe', 7125, 9777, 6994]
['Purple Blazer', 9479, 8226, 8376]
['Moist Coin', 76, 64, 4694]
['Moist Dragon', 868, 9005, 117]

['Ad axe', 'Axe', 7125, 9777, 6994]
['Purple Blazer', 9479, 8226, 8376]
['Moist Coin', 76, 64, 4694]
['Stinky Cat', 4081, 2507, 4474]

['Ad axe', 'Axe', 7125, 9777, 6994]
['Purple Blazer', 9479, 8226, 8376]
['Moist Coin', 76, 64, 4694]
['Red Racoon', 9434, 8935, 2005]

Tags: 项目redadpantscoinprint球员grand
1条回答
网友
1楼 · 发布于 2024-09-29 23:20:27

您可以使用zip一次从weapons,armor,trinkets,pets中选择所有元素,并将它们组合起来

import random

def grand():
  return random.randrange(0, 10000)

weapons = [
  ["Ad axe", "Axe", grand() , grand(), grand()],
  ["Stinky sword", "Sword", grand(), grand(), grand()],
  ["Purple Magic Stick", "Staff", grand(), grand(), grand()]
  ]

armor = [
  ["Purple Blazer", grand(), grand(), grand()],
  ["Stinky Coat", grand(), grand(), grand()],
  ["Red Robe", grand(), grand(), grand()]
]

trinkets = [
  ["Moist Coin", grand(), grand(), grand()],
  ["Stinky Chowder", grand(), grand(), grand()],
  ["Red Rock", grand(), grand(), grand()]
]

pets = [
  ["Moist Dragon", grand(), grand(), grand()],
  ["Stinky Cat", grand(), grand(), grand()],
  ["Red Racoon", grand(), grand(), grand()]
]

combos=list(zip(weapons,armor,trinkets,pets))
for index,combo in enumerate(combos):
  print "combo ",index + 1
  for element in combo:
    print element
  print

输出

combo  1
['Ad axe', 'Axe', 5331, 5696, 9868]
['Purple Blazer', 5327, 8935, 1790]
['Moist Coin', 2760, 1711, 4221]
['Moist Dragon', 6795, 6286, 2978]

combo  2
['Stinky sword', 'Sword', 5286, 7823, 4969]
['Stinky Coat', 2891, 7038, 9630]
['Stinky Chowder', 6799, 6348, 4364]
['Stinky Cat', 1529, 9904, 4510]

combo  3
['Purple Magic Stick', 'Staff', 8290, 5438, 1440]
['Red Robe', 5234, 9325, 7550]
['Red Rock', 229, 4118, 5613]
['Red Racoon', 9673, 9777, 1662]

相关问题 更多 >

    热门问题