Python 如何从21个唯一值列表中获得3个唯一值列表?

Python 如何从21个唯一值列表中获得3个唯一值列表?,python,list,Python,List,我正在做基本的Python卡片技巧,我搜索的内容太复杂了,下面是我的代码: import random import itertools deck = ["S A","S 2","S 3","S 4","S 5","S 6","S 7","D A","D 2","D 3","D 4","D 5","D 6","D 7","C A","C 2","C 3","C 4","C 5","C 6","C 7"] random.shuffle(deck) for z in range(3): p

我正在做基本的Python卡片技巧,我搜索的内容太复杂了,下面是我的代码:

import random
import itertools
deck = ["S A","S 2","S 3","S 4","S 5","S 6","S 7","D A","D 2","D 3","D 4","D 
5","D 6","D 7","C A","C 2","C 3","C 4","C 5","C 6","C 7"]
random.shuffle(deck)
for z in range(3):
    print("Pile ",[z+1])
    for i in range(7):
        print(deck[i])
我想做的是得到它,所以当我得到我的3堆数据时,我不想要任何重复的值,但我无法确定我是如何做到的,或者我是如何在3个单独的列中得到它们的?

使用

piles=[deck[0::3],deck[1::3],deck[2::3]]
此构建3分别从位置0、1和2开始列出,从一个项目跳到另一个项目,长度为3。不需要知道初始列表的大小

  • 首先拾取项目0、3、6
  • 第二个选择项目1,4,7
  • 第三个选择项目2,5,8

代码中的细微修改

n = 0     # starting index of pile 1
for i in range(3):
    print("Pile ",[i+1])
    for j in range(n,n+7):
        print(deck[j])
    n = n+7     # update the index to next pile
试试这个:

import random

deck = ["S A","S 2","S 3","S 4","S 5","S 6","S 7","D A","D 2","D 3","D 4","D 5","D 6","D 7","C A","C 2","C 3","C 4","C 5","C 6","C 7"]
data = {}
for i in range(3):
    data[i] = []
    for j in range(7):
        data[i].append(deck.pop(random.randint(0,len(deck)-1)))
print(data)

兰迪斯!正如你在问题中提出的那样,我不太明白制作3个专栏的想法,但这是你可能会发现有用的:

import random

deck = [
  "S A", "S 2", "S 3", "S 4", "S 5", "S 6", "S 7",
  "D A", "D 2", "D 3", "D 4", "D 5", "D 6", "D 7",
  "C A", "C 2", "C 3", "C 4", "C 5", "C 6", "C 7"
  ]

hands = {}

for stack in range(3):
  hands[stack] = []
您还可以将随机生成的值分配给稍后的.append(),然后从列表中删除,以提高代码可读性

  for card in range(7):
    hands[stack].append(deck.pop(random.randint(0, len(deck) - 1)))
“手牌”将从牌组中随机分配一张牌,直到每个“手牌”堆叠了7张牌

for stack in hands:
  print(stack, '-', hands[stack])

请提供你期望的输入输出。我应该把甲板上的所有物品分成3堆,没有重复。因此,第一堆牌组中应该有7张牌,第二堆牌组中应该有不同的7张牌,第三堆牌组中应该有最后的7张牌,但是所有的牌都是随机的,所以第一堆牌组不仅仅是黑桃牌中的所有牌。牌组中已经包含了唯一的值,您只需将其分成3堆即可。目前,你只是在洗牌,并打印洗牌牌组的前7张牌三次…打印(牌组[:7])打印(牌组[7:14])打印(牌组[14:21])为什么不将你已经洗牌的列表切片?好的,我如何将它们放入列中使其更整洁?好主意,但是如何指定每一堆包含7张卡?@mkrieger1,您不必这样做。拾取将以“甲板”列表的结尾结束。如果甲板只有20个项目,第三个列表将只有6个元素(7+7+6)。就像你给玩家分发卡片一样。