【问题标题】:Turning certain characters of lists into strings将列表的某些字符转换为字符串
【发布时间】:2013-07-24 07:27:06
【问题描述】:

我正在完成我的第二个学校作业,并且对编程非常陌生。我们只是在 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 函数不太熟悉。任何帮助将非常感激!!非常感谢!

【问题讨论】:

  • 需要转成列表['a', 4, 2, 'j', 'a']还是字符串"a 4 2 j a"

标签: python string list


【解决方案1】:

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

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

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

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

【讨论】:

  • +1 用于初学者友好的答案,而不是在此阶段可能只会混淆 OP 的列表理解。
  • 其实我同意@blablatros - 第二个作业和列表理解o-O
【解决方案2】:

更好的方法是使用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 的回答修复您的代码。

【讨论】:

  • 或者你可以这样做。 :)
  • 这太完美了!非常感谢
  • 太棒了。请将您认为最有用的答案标记为accepted
【解决方案3】:

使用列表推导:

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

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

【讨论】:

    【解决方案4】:

    map 将 iterable 作为第二个参数,将应用于每个元素的函数作为第一个参数。

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

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

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

    【讨论】:

      【解决方案5】:

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

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

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-19
        • 1970-01-01
        • 1970-01-01
        • 2020-06-11
        • 2021-11-25
        • 2013-10-21
        • 1970-01-01
        • 2021-12-04
        相关资源
        最近更新 更多