Python 如何以不规则的间隔分割列表?

Python 如何以不规则的间隔分割列表?,python,numpy,Python,Numpy,我在下面的列表中列出了我想要做的切片,这样我的最终结果就是[1,1.5,2,2.5,4.5,5]。我试图通过索引访问,但它给了我错误 `list = [1,1.5,2,2.5,3,3.5,4,4.5,5] print(list) print(list[0,1,2,3,7,8])` 不能使用索引列表对列表进行切片或索引。您必须使用一个循环,例如,通过,或一个包含隐式循环的函数,如: 但是你可以用numpy数组做类似的事情。您不能直接使用这六个索引(因为这意味着多维索引),但可以使用包含这六个索

我在下面的列表中列出了我想要做的切片,这样我的最终结果就是[1,1.5,2,2.5,4.5,5]。我试图通过索引访问,但它给了我错误

`list = [1,1.5,2,2.5,3,3.5,4,4.5,5]
print(list)
print(list[0,1,2,3,7,8])`

不能使用索引列表对列表进行切片或索引。您必须使用一个循环,例如,通过,或一个包含隐式循环的函数,如:


但是你可以用numpy数组做类似的事情。您不能直接使用这六个索引(因为这意味着多维索引),但可以使用包含这六个索引的任何数组,如列表:

>>> arr = np.array(lst)
>>> print(arr[[0, 1, 2, 3, 7, 8]])
[1.  1.5 2.  2.5 4.5 5. ]

这在基本索引教程中进行了解释。

Python不支持不规则间隔。您必须使用列表

lst = [1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5]
indices = (0, 1, 2, 3, 7, 8)
slice = [lst[i] for i in indices]

print(slice) # [1, 1.5, 2, 2.5, 4.5, 5]

另外,不要为变量使用
list
等名称,因为这会掩盖内置函数;不要选择非连续范围,而是删除不需要的连续范围。您只想获得原始的
列表
减去索引4-6(包括),因此复制
列表
,然后删除不需要的索引:

mylist = [1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5]
trimmed = mylist[:]
del trimmed[4:7]
print(trimmed)
或者,您可以使用
操作符.itemgetter
检索您列出的特定索引,例如:

from operator import itemgetter

mylist = [1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5]
print(itemgetter(0, 1, 2, 3, 7, 8)(mylist))

多个值的
itemgetter
将输出一个
元组
,因此如果这让您感到困扰,您必须转换回
列表
,例如
打印(列表(itemgetter(0,1,2,3,7,8)(mylist))
(请注意,选择将变量名更改为
mylist
可以访问
list
构造函数,如果将变量命名为
list
,则无法访问该构造函数).

您已经标记了这个NumPy,但是您没有使用任何NumPy数据结构或功能。
NumPy
是如何涉及的?您在这里使用的是普通的Python
list
s(顺便说一句,命名变量
list
是一个糟糕的主意,因为您这样命名
list
构造函数)。首先,我尝试了这个numpy数组而不是列表。这就是为什么我标记numpy数组,
arr[[0,1,2,3,7,8]]
。请注意带有列表的[].Index。尽管由于numpy索引处理中的一些原因,使用任意数组类对数组进行索引可能会非常奇怪。
a[[1,2]]
被视为
a[array([1,2])
,但是
a[[1,2],[3,4]]]
被视为
a[array([1,2]),array([3,4])]
而不是
a[array([[1,2],[3,4]])
@user2357112,这是因为元组不是一个类似于索引数组的数组。这在教程部分的第一句中已经提到,后面还有一句“我会解释”链接到同一章的结尾。这不是关于向后兼容性;这是因为元组已经用于多维索引,因此也将它们用于索引数组索引是不明确的。不,你考虑的是不同的效果。我不是在谈论使用元组或其他ArrayLike索引之间的区别;这是文档化。我说的是如果
index
是一个列表,
a[index]
有时被视为
a[array(index)]
有时被视为
a[tuple(index)]
@user2357112哦,我明白了,是的,多维度列表的顶层有时被视为一个元组,而文档只是说(某处)你永远不应该依赖它,除非你说你也不能依赖它不会发生(正如你所希望的那样)。
from operator import itemgetter

mylist = [1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5]
print(itemgetter(0, 1, 2, 3, 7, 8)(mylist))