2

我正在做我的第二份学校作业,并且对编程非常陌生。我们只是在 python 中覆盖列表,我遇到了一些麻烦。我们正在使用列表制作钓鱼游戏,我需要将一些字符转换为列表或新字符串。最好是一个字符串,因为我需要将它连接到另一个字符串。

我们有一个代表每个玩家卡片的列表列表,看起来像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

它导致无法将 str 连接到列表的错误,而且我对 join 函数不太熟悉。任何帮助将非常感激!!太感谢了!

4

5 回答 5

3

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

+仅当两边的元素都是列表时才适用于这种情况。所以你也可以这样做:

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

但是,这会很浪费,因为它 (1) 分配了一个新的临时列表对象,并且 (2) 返回一个新的列表对象而不是修改现有的列表对象。

于 2013-07-23T21:31:12.903 回答
3

更好的方法是使用列表推导

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

所以,基本上

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

当然,根据 cdhowie 的回答修复您的代码。

于 2013-07-23T21:32:21.930 回答
0

map 将一个可迭代对象作为第二个参数,将应用于每个元素的函数作为第一个参数。

字符串函数 .join() 接受一个可迭代对象作为参数,并使用它被调用的字符串来连接元素。

最后,卡片套数上升到 10,因此所有建议抓取 0 索引的解决方案都将在 10 时中断,错误地返回 1。从第一个到倒数第二个字符的索引解决了这个问题,如 "10c"[0:-1] == “10”。

" ".join( 
  map( lambda i: i[0:-1], ["ac","4c","2h","jd","ad"] )
)
于 2013-07-23T22:26:56.603 回答
0

出现错误是因为您尝试连接列表和非列表。

有很多方法可以做到这一点。

单线: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
于 2013-07-23T23:27:06.233 回答
0

使用列表推导:

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

字符串的 join 方法只是将可迭代的元素(例如列表)连接到字符串中,列表推导式是 Python 中迭代列表的一种有效且有趣的方式。

于 2013-07-23T21:33:14.640 回答