我想对以下列表进行切片,以使最终结果为[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])`
答案 0 :(得分:2)
您不能使用索引列表来对列表进行切片或索引。您必须使用循环,例如通过comprehension或其中包含隐式循环的函数,例如itemgetter
返回的循环:
>>> lst = [1,1.5,2,2.5,3,3.5,4,4.5,5]
>>> print([lst[i] for i in [0, 1, 2, 3, 7, 8]])
[1, 1.5, 2, 2.5, 4.5, 5]
>>> print(operator.itemgetter(0, 1, 2, 3, 7, 8)(lst))
[1, 1.5, 2, 2.5, 4.5, 5]
但是您可以用numpy数组做类似的事情。您不能直接使用六个索引(因为这意味着多维索引),但是您可以 使用包含这六个索引的任何类似数组的形式(例如列表):
>>> arr = np.array(lst)
>>> print(arr[[0, 1, 2, 3, 7, 8]])
[1. 1.5 2. 2.5 4.5 5. ]
在基本索引指南的Index arrays中对此进行了解释。
答案 1 :(得分:0)
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
之类的名称作为变量,因为这会掩盖内置函数。
答案 2 :(得分:0)
以另一种方式工作;而不是选择非连续范围,请删除您不需要所需的连续范围。您只想获取原始的list
减去索引4-6(含4-6),因此复制您的list
,然后复制del
不需要的索引:
mylist = [1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5]
trimmed = mylist[:]
del trimmed[4:7]
print(trimmed)
或者,您可以使用operator.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
(包含多个值)将输出tuple
,因此,如果您对此感到烦恼,则必须转换回list
,例如print(list(itemgetter(0, 1, 2, 3, 7, 8)(mylist)))
(请注意,选择将变量名更改为mylist
使得可以访问list
构造函数,而如果您将变量命名为list
则是不可能的。 )。