mad*_*ad_ 3 python arrays numpy list python-2.7
我想知道基于索引切片 python 列表的有效且优雅的方法是什么。为了提供一个最小的例子:
temp = ['a','b','c','d']
index_needed=[0,2]
Run Code Online (Sandbox Code Playgroud)
如何在没有循环的情况下对列表进行切片?
预期产出
output_list =['a','c']
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,会有办法,但还没有找到。有什么建议么?
首先,请注意 Python 中的索引从 0 开始。因此您需要的索引将为[0, 2]。
然后您可以使用列表理解:
temp = ['a', 'b', 'c', 'd']
idx = [0, 2]
res = [temp[i] for i in idx] # ['a', 'c']
Run Code Online (Sandbox Code Playgroud)
使用内置插件,您可能会发现map性能更好:
res = map(temp.__getitem__, idx) # ['a', 'c']
Run Code Online (Sandbox Code Playgroud)
由于您使用的是 Python 2.7,因此这会返回一个列表。对于 Python 3.x,您需要将map对象传递给list.
如果您希望完全避免 Python 级循环,您可能希望使用第 3 方库,例如 NumPy:
import numpy as np
temp = np.array(['a', 'b', 'c', 'd'])
res = temp[idx]
# array(['a', 'c'],
# dtype='<U1')
res2 = np.delete(temp, idx)
# array(['b', 'd'],
# dtype='<U1')
Run Code Online (Sandbox Code Playgroud)
这将返回一个 NumPy 数组,然后您可以通过 将该数组转换为列表res.tolist()。
| 归档时间: |
|
| 查看次数: |
2851 次 |
| 最近记录: |