簡體   English   中英

Python定義無法使用列表理解

[英]Python definition not working using list comprehension

我正在使用python編寫關於Udacity的課程之后的撲克程序。 我正在使用的定義之一是本課程中正在使用的以下定義。

def card_ranks(cards):
"Return a list of the ranks, sorted with higher first."
    ranks = ['--23456789TJQKA'.index(r) for r,s in cards]
    ranks.sort(reverse=True)
    return ranks

因此,這意味着例如card_ranks([TH,9C,9D,7S])應該返回[10,9,9,7]。 但是我收到以下錯誤

ValueError                                Traceback (most recent call 
last)
<ipython-input-13-ff8fb242bb41> in <module>()
----> 1 card_ranks(['9H','8C','7C','10D'])

<ipython-input-12-7eaf1ab781bc> in card_ranks(cards)
      1 def card_ranks(cards):
      2     "Return a list of the ranks, sorted with higher first."
----> 3     ranks = ['--23456789TJQKA'.index(r) for r,s in cards]
      4     ranks.sort(reverse=True)
      5     return ranks

ValueError: too many values to unpack

有誰知道如何修理它? 順便說一句,我是新來列出理解的人,我自己嘗試了以下方法,如果僅使用卡片中的數字,則可以嘗試以下方法

def card_ranks(cards):
    "Return a list of the ranks, sorted with higher first."
    ranks = [r[0] for r in cards]
    ranks.sort(reverse=True)
    return ranks

所以我自然地嘗試了

def card_ranks(cards):
        "Return a list of the ranks, sorted with higher first."
         ranks = ['--23456789TJQKA'.index(r[0]) for r in cards]
         ranks.sort(reverse=True)
         return ranks    

但這也不起作用。 我將非常感謝您的幫助,該代碼可以正常工作,但是在我使用它時不會。 我正在使用Jupyter筆記本。

'10D'是由三個字符組成的序列,該值太多,無法解包為r,s

如果您改用'TD'它應該可以工作。

您上次執行的代碼是正確的。 但是你有一個小錯誤。 看起來您有“ 10D”卡。 因此,當您執行r[0]您將獲得'1'。 但是您的索引字符串中沒有這種情況。 因此'--23456789...'.index(r[0])引發異常。

正確的代碼將如下所示:

def card_ranks(cards):
    "Return a list of the ranks, sorted with higher first."
     ranks = ['--234567891TJQKA'.index(r[0]) for r in cards]
     ranks.sort(reverse=True)
     return ranks 

*(取決於哪個索引應該有10張卡,以及哪張其他卡(T,J,Q,K,A)

您正在試圖unpack成太少變量。

list comprehension

ranks = ['--23456789TJQKA'.index(r) for r,s in cards]

拆包每個cardcards插入變量rs 為了簡化此過程,您可以使用相同的方式分配variables

a, b = "xy"

所以現在a'x'並且b持有y

但是,您的問題是由list的最后card引起的: 10D 您正在試圖unpack這個card3 chars到只有2變數。 可以再次簡化為嘗試執行以下操作:

a, b = "10D"

這將引發與您相同的ValueError

ValueError: too many values to unpack (expected 2)

當您了解要使計算機執行的操作時,這實際上是完全有意義的。

要解決此error ,只需將卡值作為TD而不是10D傳遞,這將使其正確unpacked2變量中: rs

r, s = "TD"

# r <-- "T"
# s <-- "D"

這應該消除您的errorfunction將正確輸出。 :)

暫無
暫無

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

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