2013-01-12 78 views
1

我想将列表转换为字符串,但它包含整数。它的工作原理现在,反正这是代码:将包含整数的列表转换为字符串

for player in basicPlayers: 
    say('Name' + str(player['name']) + 'score' + str(player['score'])) 

的sooo是的,我想让它像

Player1 (2), Player2 (4), Player3 (6) 

Player1 (2) 
Player2 (4) 
Player3 (6) 

是获取数据的代码:

def getBasicPlayers(self): # Finished 
     """Returns a list containing a dictionary for each player: 
     [ 
      { 
       'name' : string, 
       'score' : integer, 
      }, 
      { 
       'name' : string, 
       'score' : integer, 
      }, 
     ] 
     Note: This will return an empty list if the player count is above 100.""" 
     packet = self.assemblePacket("c") 
     self.send(packet) 

     reply = self.receive() 
     reply = reply[11:] # Clean up bytes 
     players = [] 

     strLen = struct.unpack("<h", reply[0:2]) 
     playerCount = strLen[0] 

     reply = reply[2:] # Clean up bytes 

     for i in range(playerCount): 
      players.append({'name' : '', 'score' : 0}) 

     pointer = 0 

     for player in players: 
      strLen = ord(reply[pointer:(pointer + 1)]) 

      name = reply[(pointer + 1):(pointer + (strLen + 1))] 

      temp = struct.unpack("<i", reply[(pointer + (strLen + 1)):(pointer + (strLen + 5))]) 
      pointer += (strLen + 5) 

      player['name'] = name 
      player['score'] = temp[0] 

     return players 
+0

又是什么问题?您的示例'Player1(2),Player2(4)...'与您的打印不匹配。 – 2013-01-12 18:03:45

+0

没有问题,我只是不知道如何将其转换为字符串,所以它不会是一个列表。我尝试使用.join,但它包含整数,并且我读了一些地方,如果它包含整数,它就不可能.join(也可以用'it works'表示代码有效,没有问题) – RewriteRule

回答

2

怎么样
', '.join('Name %(name)s Score %(score)d' % player for player in basicPlayers) 

注意join采取任何迭代作为它的参数,在这种情况下,我们通过发电机表达它。


例如:

basicPlayers = [{'name' : 'Bob','score' : 42}, {'name' : 'Joe','score' : 24}] 

print ', '.join('Name %(name)s Score %(score)d' % 
              player for player in basicPlayers) 
 
Name Bob Score 42, Name Joe Score 24 
+2

这可能是值得解释的这利用了[生成器表达式](http://www.youtube.com/watch?v=pShL9DCSIUw)。 –

+1

是的,谢谢! – RewriteRule

1

这是更好地使用format功能,我想。

>>> basicPlayers = [{'name': 'John', 'score': 1}, {'name': 'Mary', 'score': 2}] 
>>> ', '.join(('{name} ({score})'.format(**player) for player in basicPlayers)) 
'John (1), Mary (2)' 
相关问题