2013-07-23 106 views
2

我正在進行我的第二次學校任務,並且對編程很陌生。我們只是在Python中覆蓋列表,我遇到了一些麻煩。我們正在使用列表製作一個go fish遊戲,並且我需要將一些字符轉換爲一個列表或一個新字符串。最好是一個字符串,因爲我需要將它連接到另一個字符串。將列表中的某些字符轉換爲字符串

我們代表每個球員的卡列表的列表,看起來像pHands[0] = [ac,4c,2h,jd,ad],我需要把它變成"a 4 2 j a"

def MyCards (pHands,player_number): 

    card_list = [] 
    for i in range(len(pHands[0])): 
     card_list = card_list + (pHands[0][i][0]) 
    return card_list 

這是導致不能夠串連海峽列出的錯誤,我對連接函數不太熟悉。任何幫助將非常感激!!非常感謝!

+0

你需要把它變成一個列表'[ '一',4,2, 'J','一個']'或一個字符串'「一個4 2 ja」'? – blablatros

回答

3

使用card_list.append(pHands[0][i][0])

+只適用於這種情況下,當兩邊的元素是列表。所以,你也可以這樣做:

card_list = card_list + [pHands[0][i][0]] 

然而,這是一種浪費,因爲它(1)分配一個新的臨時列表對象,和(2)返回一個新的列表對象,而不是修改現有的。

+0

+1初學者友好的回答,而不是列表理解,可能會在這個階段混淆OP。 – blablatros

+0

其實我同意@blablatros - 第二項任務,並列出理解O-O – karthikr

3

一個更好的辦法是使用list comprehensions

card_list = [item[0] for item in pHands[0]] 

所以,基本上

def MyCards (pHands, player_number): 
    return [item[0] for item in pHands[0]] 

,當然還有,要解決你的代碼按cdhowie的答案。

+0

或者你可以這樣做。 :) – cdhowie

+0

這是完美的!非常感謝你 –

+0

太好了。請將您發現最有用的答案標記爲[accepted](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – karthikr

0

使用列表理解:

>>> pHands = ['ac','4c','2h','jd','ad'] 
>>> " ".join([i[0] for i in pHands]) 
'a 4 2 j a' 

連接字符串的方法簡單地加入可迭代的元素,如列表轉換爲字符串,列表理解是itering在Python中的列表的有效和有趣的方式。

0

map將iterable作爲第二個參數,並將作爲第一個參數應用於每個元素的函數。

字符串函數.join()將可迭代的參數作爲參數,並使用它調用的字符串來合併元素。

最後Card適合最多10個,因此所有建議抓住0索引的解決方案都會打破10,錯誤地返回1.從第一個到第二個最後一個字符的索引解決了這個問題,如在「10c」[0 :-1] ==「10」。

" ".join( 
    map(lambda i: i[0:-1], ["ac","4c","2h","jd","ad"]) 
) 
0

出現錯誤是因爲您試圖連接列表和非列表。

有很多方法可以做到這一點。

Oneliner:def MyCards (pHands,player_number): return [i[0] for i in pHands[0]]

如果你想編輯自己的代碼:

def MyCards (pHands,player_number): 
    card_list = [] 
    for i in range(len(pHands[0])): 
     card_list.append(pHands[0][i][0]) 
     # remeber don't use concatenation here. i.e. card_list = card_list + [pHands[0][i][0]] 
     # because it creates a new list and assign it to card_list and that is bad for space. 
    return card_list