10
首先请原谅我有点不好的标题。我不太确定该怎么说。如果有人可以建议一个更好的标题,那就太棒了。Python列表理解拆分循环变量
我想知道是否有办法将列表理解的每个迭代的值分割一次,但在输出中使用它两次。我试图解决这个问题的一个例子是:
我有串
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]
在这个问题上,我不寻找花哨的方式来获取字符串的第2和第3列。这只是提供具体例子的一种方式。我能为课程的例子使用:
[x.split(";")[1:3] for x in a.split("\n")]
我已经想到了可能的解决方案:
- 不使用列表理解
- 将它保持不变
- 使用csv.DictReader ,命名我的专栏和类似StringIO的东西给它输入。
这主要是一些可以使用而不是特定情况的好模式,所以它很难回答“你为什么要这样做”或“这是什么”有点问题
感谢提前:)
UPDATE:是读解下面我去跑一些速度测试之后。我在非常基本的测试中发现,所提供的解决方案比上述天真的解决方案快35%。
感谢非常酷:) – Nick 2012-04-25 04:06:29