我只是使用python从列表中提取了一些数据,但认为它过于复杂和unpythonic,并且可能有更好的方法来做到这一点.我其实很确定我在标准库文档中看到了这个,但我的大脑拒绝告诉我在哪里.
所以这里:
输入:
x = range(8) # any even sequence
Run Code Online (Sandbox Code Playgroud)
输出:
[[0, 1], [2, 3], [4, 5], [6, 7]]
Run Code Online (Sandbox Code Playgroud)
我的看法:
[ [x[i], x[i+1]] for i in range(len(x))[::2] ]
Run Code Online (Sandbox Code Playgroud)
>>> zip(*2*[iter(x)])
[(0, 1), (2, 3), (4, 5), (6, 7)]
Run Code Online (Sandbox Code Playgroud)
zip() 行为略有不同......
>> zip(*2*[iter(x)])
<zip object at 0x285c582c>
>>> list(zip(*2*[iter(x)])])
[(0, 1), (2, 3), (4, 5), (6, 7)]
Run Code Online (Sandbox Code Playgroud)
Python 2和3中的实现是相同的......
>>> [[i,j] for i,j in zip(*2*[iter(x)])]
[[0, 1], [2, 3], [4, 5], [6, 7]]
Run Code Online (Sandbox Code Playgroud)
或者,或者:
>>> [list(t) for t in zip(*2*[iter(x)])]
[[0, 1], [2, 3], [4, 5], [6, 7]]
Run Code Online (Sandbox Code Playgroud)
如果你想分成list3个或更多元素的s而不拼写出来,后者更有用,例如:
>>> [list(t) for t in zip(*4*[iter(x)])]
[[0, 1, 2, 3], [4, 5, 6, 7]]
Run Code Online (Sandbox Code Playgroud)
如果你zip(*2*[iter(x)])看起来有点奇怪(我第一次看到它的时候它就对我做了!),看看如何zip(*[iter(s)]*n)在Python 中工作?.
另见这种成对实现,我认为它非常整洁.
| 归档时间: |
|
| 查看次数: |
3490 次 |
| 最近记录: |