当前位置: 首页 > 面试题库 >

在多个列表上并行进行Pythonic迭代

宋飞文
2023-03-14
问题内容

我想知道一种优雅的Pythonic方法,可以在Python 3 中并行
地遍历列表列表(或列表的字典)。列表数量要到运行时才知道,所以我相信我不能简单地将它们作为参数提供该zip()功能。

例如,给定以下数据结构:

var = [['x1' ,'x2' ,'x3'], ['y1', 'y2', 'y3'], ['z1', 'z2', 'z3'], …]

我希望能够在每次迭代中访问以下值:

x1,y1,z1其次是x2,y2,z2依次x3,y3,z3类推。

大概我可以直接使用列表索引或使用itertools.chain实现此目的,但是我正在寻找使用生成器或其他方法的更优雅的方法。


问题答案:

zip(*var) 会自动打开您的列表清单。

因此,例如:

var = [['x1' ,'x2' ,'x3'], ['y1', 'y2', 'y3'], ['z1', 'z2', 'z3'], ['w1', 'w2', 'w3']]

for ltrs in zip(*var):
    print(", ".join(ltrs))

结果是

x1, y1, z1, w1
x2, y2, z2, w2
x3, y3, z3, w3

编辑: 根据下面的评论,他想使用字典中的项目,

var = {
    'id_172': ['x1', 'x2', 'x3'],
    'id_182': ['y1', 'y2', 'y3'],
    'id_197': ['z1', 'z2', 'z3']
}

我假设我们正在按键顺序使用值:

keys = sorted(var.keys())
for ltrs in zip(*(var[k] for k in keys)):
    print(", ".join(ltrs))

这使

x1, y1, z1
x2, y2, z2
x3, y3, z3

警告: 请注意,这会按照字典顺序(即字符串字母顺序)对键进行排序,例如,“ id_93”
id_101”之后。如果您的标签需要按数字顺序排序,则需要使用自定义键功能,例如

keys = sorted(var.keys(), key=lambda k: int(k[3:]))


 类似资料:
  • 简而言之:在我的JSP中,我需要使用C:Foreach jstl迭代一个自定义bean类列表,比如list,MyClass有键和值变量,以及这些变量的getter和setter 细节:类似这样的内容: 在Java代码中,我有: List pairlist=new ArrayList();//MyClass是一个简单的bean类,具有变量“key”和“value”,以及相同的getter和sette

  • 问题内容: 我在表服务器中有2列。 我有专栏和。 我有验证: 这仅适用于列。但是如何做到这一点并适用于专栏呢? 我想列验证data.ip 和。因为在用户写入ip时,ip和主机名列中可以重复。 问题答案: 您可以用来实现验证规则

  • 问题内容: 所以我有一个json,我试图只获取活动用户的所有统计信息。当我尝试在for循环中执行以下操作时 它不起作用…但是只要没有记录,只要没有for循环就可以正常工作 这是我的html 这是我的js 这是一个演示链接http://jsfiddle.net/4kzzy/174/ 问题答案: 没什么复杂的,只是语法错误。 for循环需要这样写: 即没有多余的,没有多余的,也没有内部。 参见http

  • 问题内容: 如何习惯地在多个DataFrame列上运行类似的函数,该函数期望一个列并返回多个列? 问题答案: 使用 pandas 0.19 ,您可以在一行中完成此操作: 指定在哪里进行一次热编码。

  • 问题内容: 我有一个(实际上,我使用的是更复杂的POJO,但是为了我的问题而简化了它) 好像 : 我如何遍历此地图,打印出密钥,然后打印人名,然后打印人年龄,例如: A是Map < String ,Person> 的键 B是Person.getName()的名称 C是Person.getAge()的年龄 我可以使用.values()从地图中提取所有值,如HashMap文档中所述,但是我不确定如何获

  • 我有两份清单: 列表1: Object1(name1, id1) 列表2: Object2(name2, id2) 给定list1的大小与list2相同 我想迭代list2,如果list2的name2不为null,则更新list1的name1。 以下是使用旧java的代码: 用java实现这一点的最佳方法是什么。util。流动