我试图找出是否有一种方法可以将列表理解的每次迭代的值仅拆分一次,但在输出中使用两次。

作为我要解决的问题的一个示例,我有以下字符串:

a = "1;2;4\n3;4;5"

我想执行以下操作:
>>> [(x.split(";")[1],x.split(";")[2]) for x in a.split("\n") if x.split(",")[1] != 5]
[('2', '4'), ('4', '5')]

无需运行拆分三遍。所以是这样的(这显然是无效的语法,但希望足以传达消息):
[(x[1],x[2]) for x.split(";") in a.split("\n") if x[1] != 5]

在这个问题中,我不是,而是,而是寻找获取字符串第二和第三列的理想方法。这只是提供具体示例的一种方式。我当然可以为示例使用:
[x.split(";")[1:3] for x in a.split("\n")]

我想到的可能的解决方案:
  • 不使用列表理解
  • 保留
  • 使用csv.DictReader,命名我的列以及类似StringIO的名称作为输入。

  • 这主要是一种可以使用的好模式,而不是特定的情况,因此很难回答“您为什么要这样做”或“这是什么意思”这类问题

    更新:在阅读了下面的解决方案后,我去进行了一些速度测试。我在最基本的测试中发现,所提供的解决方案比上面的幼稚解决方案快35%。

    最佳答案

    您可以使用围绕生成器表达式的列表理解:

    [(x[1],x[2]) for x in (x.split(";") for x in a.split("\n")) if x[1] != 5]
    

    关于python - 列表理解拆分循环变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10308939/

    10-12 16:39