我正在为学校做第二次任务,对编程很新。我们只是在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函数不太熟悉。任何帮助将非常感激!!非常感谢你!
答案 0 :(得分:3)
使用card_list.append(pHands[0][i][0])
。
+
才适用于此上下文。所以你也可以这样做:
card_list = card_list + [pHands[0][i][0]]
然而,这会浪费,因为它(1)分配一个新的临时列表对象,(2)返回一个新的列表对象而不是修改现有的列表对象。
答案 1 :(得分: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的答案来修复你的代码。
答案 2 :(得分:0)
使用列表推导:
>>> pHands = ['ac','4c','2h','jd','ad']
>>> " ".join([i[0] for i in pHands])
'a 4 2 j a'
字符串的join方法只是将iterable的元素(例如list)连接成一个字符串,list comprehension是一种有效且有趣的方法,可以在Python中列出一个列表。
答案 3 :(得分:0)
map将iterable作为第二个参数,并将函数作为第一个应用于每个元素。
字符串函数.join()将iterable作为参数,并使用它所调用的字符串来连接元素。
最后,卡套装达到10,所以所有解决方案建议抓住0指数将突破10,错误地返回1.从第一个到第二个字符的索引解决了这个问题,如“10c”[0: -1] ==“10”。
" ".join(
map( lambda i: i[0:-1], ["ac","4c","2h","jd","ad"] )
)
答案 4 :(得分: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