簡體   English   中英

列表理解而不使用iterable

[英]List comprehension without using an iterable

我試圖通過從另一個列表中選擇隨機元素來建立一個列表,沒有重復。 想想洗牌一副牌。 我顯然可以為此編寫一些unpythonic代碼,我不想這樣做。

所以這就是我想要做的:

new = [deck[i] where 0<(i = some_rand_int)<51 if new.count(deck[i]) == 0]

有沒有辦法做到這一點?

我試圖通過從另一個列表中選擇隨機元素來建立一個列表,沒有重復。

使用random.sample

random.sample(population,k)

返回從總體序列中選擇的獨特元素的長度列表。 用於無需更換的隨機抽樣。

嘗試這個:

result = random.sample(deck, n)

要隨機播放整個列表,請使用random.shuffle

random.shuffle(deck)

仍然很好奇,如果這可以使用列表理解完成!

並不是的。 列表comphrension保留元素的順序,但允許您投影或過濾它們。 改組不是投影或過濾器。

您可以使用生成器:

import random

def pick(deck):
    while True:
        try:
            newCard = random.choice(deck)
            deck.remove(newCard)
        except:
            print 'deck is empty...'
        yield newCard

def resetDeck():
    deck = []
    newCard = None
    for i in range(1,53):
        deck.append(i)
    return deck

pick(deck)從牌組中挑選一張牌,如果你想重新創建牌組,請使用resetDeck()。 實施后,使用pick(deck).next()從牌組中選擇牌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM