【问题标题】:Python for loop access two elements at a time [duplicate]Python for循环一次访问两个元素[重复]
【发布时间】:2023-03-29 05:55:01
【问题描述】:

我正在向字典的值部分添加名称和项目属性的值:

value+=child.get('name') + '\t' + child.text + '\t' 

每段文本都由制表符分隔。因此,当我稍后处理这个值字符串时,我在选项卡上拆分并有一个 for 循环来迭代列表。

如何在 for 循环中同时访问名称和值。至于每个属性,我想一次性获取名称和值并将其写入文件。目前该列表如下所示:

[a,b,a,b,a,b,a,b]

对于我想写的每个 a,b:

'' b ''

【问题讨论】:

  • 永远不要在大量的字符串连接上使用 +=。做一个可迭代的并使用 join 代替

标签: python for-loop


【解决方案1】:

您可以使用步长 2 迭代列表,并在每次迭代中获取名称和标签...

for i in range(0,len(list1),2):
    name = list1[i]
    tag = list1[i+1]
    print '<tag name="%s">%s</tag>' % (name, tag)

【讨论】:

    【解决方案2】:

    编辑:如果您的键是唯一的,并且顺序无关紧要,那么...

    我认为你应该convert your list to a dictionary,然后遍历字典的键:

    # assuming you converted your list to a dictionary called values
    
    for k in values:
       print '<tag name="%s">%s</tag>' % (k, values[k])
    

    编辑:如果您不需要字典来打印结果,那么发布的其他答案可能是更好的方法。

    【讨论】:

    • 如果它们自然而然地以除了 name:value 以外的方式结合在一起,这对于字典映射来说很典型,您可能希望将它们存储为元组。
    • 虽然我总体上同意你的观点,dict 是一个很好的解决方案,但在这种情况下的转换并非易事。 OP 在填充 dict 以检查密钥是否已经存在时需要小心 - 而不是覆盖它,他们必须附加到值。
    • 这些都是好点,我会编辑以反映它们。
    • 不要使用 values.keys(),只使用 values
    【解决方案3】:

    首先,使用 string += string2 是个坏主意,因为每次它都会复制到一个新字符串。

    value+=child.get('name') + '\t' + child.text + '\t'
    

    应该是

    values = ((child.get('name'),child.text) for child in children)
    

    然后当你打印时,只需做

    for name,text in values:
        print '<tag name="{name}">{text}</tag>'.format(name=name,text=text)
    

    如果出于某种原因,您真的想要选项卡,那么您必须将值构造函数更改为列表(来自生成器)并执行以下操作:

    ''.join((name+'\t'+value+'\t' for name,value in values))[:-1]
    

    【讨论】:

    • 虽然我的回答最直接地回答了这个问题,但如果 OP 不介意从列表方法切换,我认为这是迄今为止最好(也是最 Pythonic)的方法。
    • 同意,使用制表符作为分隔符,然后在其他地方拆分完全没有意义,这是一种更清晰/更好的方法。
    猜你喜欢
    • 2021-06-14
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2021-09-24
    • 1970-01-01
    • 2018-08-30
    • 2017-12-26
    相关资源
    最近更新 更多