2013-07-23 64 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