[英]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]
您拆包每個card
在cards
插入變量r
和s
。 為了簡化此過程,您可以使用相同的方式分配variables
:
a, b = "xy"
所以現在a
是'x'
並且b
持有y
。
但是,您的問題是由list
的最后card
引起的: 10D
。 您正在試圖unpack
這個card
有3
chars
到只有2
變數。 可以再次簡化為嘗試執行以下操作:
a, b = "10D"
這將引發與您相同的ValueError
:
ValueError: too many values to unpack (expected 2)
當您了解要使計算機執行的操作時,這實際上是完全有意義的。
要解決此error
,只需將卡值作為TD
而不是10D
傳遞,這將使其正確unpacked
到2
變量中: r
和s
:
r, s = "TD"
# r <-- "T"
# s <-- "D"
這應該消除您的error
, function
將正確輸出。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.