【问题标题】:Using a Loop to Pair Indexes in Python在 Python 中使用循环来配对索引
【发布时间】:2013-10-29 18:21:49
【问题描述】:

请耐心等待。我是 Python 新手,才 1 个月。在这个项目中,我导入了一个文件,该文件模拟了具有相关分数的名称列表。我很难创建一个循环来打印出第一个索引及其相关对。我的程序需要 将玩家列表分成两半,并使用列表的每一半中的玩家生成对。例如,如果有 10 个玩家按等级排序,则玩家 1 玩玩家 6,玩家 2 玩玩家 7,以此类推。

谁能给我一个正确方向的快速指南?我的示例代码如下,一旦完成,我需要把它变成一个具有工作功能的程序。

def main():

    myfile = open('CHESS.txt','r')

    players = []

    for line in myfile:
        line = line.rstrip('\n')
        players.append(line)
        players.sort()


    for i in players:
        m=len(players)/2
        print(players[0], players[0+m])


    myfile.close()

main()

【问题讨论】:

  • 这里有个很酷的技巧是zip(players,players[len(players)/2:])

标签: python list loops formatting std-pair


【解决方案1】:

你已经接近了。您只需为列表中的每个元素使用索引 i

m=len(players)/2
for i in range(m):
    print(players[i], players[i+m])

请注意,这要求您的玩家人数为偶数。

【讨论】:

  • 这非常接近!我很高兴我朝着正确的方向前进!非常感谢您的帮助。
  • 当我写这段代码时,它会返回一个错误。 * float' 对象不能解释为整数 * 如何将列表从浮点数转换为整数,如错误消息中所述?
  • 您是否按照我粘贴的方式运行代码?我不认为你应该得到那个错误。它适用于我使用 Python2.7 的机器。
  • 我使用的是 Python 3.3.2。它返回为:第 14 行,在 main for i in range(m): TypeError: 'float' object cannot be mapped as an integer"
  • afaik 你需要使用len(players)//2,因为 py3x 在正常除法时返回浮点数
【解决方案2】:

zip 的经典用例:

>>> players = ["Player{}".format(i) for i in range(20)]
>>> half = len(players)/2
>>> pairs = zip(players[:half], players[half:])
>>> pairs
[('Player0', 'Player10'), ('Player1', 'Player11'), ('Player2', 'Player12'), ('Player3', 'Player13'), ('Player4', 'Player14'), ('Player5', 'Player15'), ('Player6', 'Player16'), ('Player7', 'Player17'), ('Player8', 'Player18'), ('Player9', 'Player19')]

【讨论】:

  • afaik 你不需要限制 zip 中的名字......因为 zip 将以较短的结果结束(例如,你可以只做 zip(names,names[half:])
  • 好点,谢谢,没想到。但我还是更喜欢显式的方式,因为那里的意图更明显。
猜你喜欢
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
相关资源
最近更新 更多