-2

假设我有一个列表 x = [1,2,3] 并且我想输出除索引之外的所有其他值,是否可以使用列表操作?即:x[0]=> [2,3] , x[1] => [1,3], x[2] =>[1,2] ?

4

7 回答 7

5

你可以使用这个:

def exclude(l, e):
  return [v for i, v in enumerate(l) if i != e]

>>> exclude(range(10), 3)
[0, 1, 2, 4, 5, 6, 7, 8, 9]
于 2012-12-03T15:29:59.330 回答
5

你可以用切片来做,但我很想尝试:

a = [1, 2, 3]
b = a[:]
del b[1]

编辑

上面确实“技术上”使用了切片操作,它恰好在list对象上实际上是浅拷贝。

更灵活且不应该有任何缺点的是使用:

a = [1, 2, 3]
b = list(a)
del b[1]

内置列表适用于任何可迭代对象(而切片操作[:]适用于列表或可索引的列表),因此您甚至可以将其扩展到以下构造:

>>> a = '123'
>>> b = list(a)
>>> del b[0]
>>> ''.join(b)
'23'
于 2012-12-03T15:31:00.480 回答
1

你可以使用x[:i] + x[i+1:]

In [8]: x = [1, 2, 3]

In [9]: i = 0

In [10]: x[:i] + x[i+1:]
Out[10]: [2, 3]

根据上下文,x.pop(i)也可能有用。它通过删除和返回i-th元素来修改列表。如果您不需要该元素,del x[i]也是一种选择。

于 2012-12-03T15:28:33.527 回答
0
>>> x = [1, 2, 3]
>>> x[:1] + x[2:]
[1, 3]
于 2012-12-03T15:28:06.973 回答
-1
my_list  = [1, 2, 3]
my_list.remove(my_list[_index_]) #_index_ is the index you want to remove

这样:my_list.remove(my_list[0])会屈服[2, 3]my_list.remove(my_list[1])会屈服[0, 3]my_list.remove(my_list[2])会屈服[1, 2]

于 2012-12-03T16:15:15.087 回答
-2

所以你想要除索引值之外的每个值: 其中 i 是索引:

>>> list = [1,2,3,4,5,6,7,8]
>>> [x for x in list if not x == list[i]]

这将为您提供一个没有 i't 元素实例的列表,例如:

>>> i = 2
>>> list = [1,2,3,4,5,6,7,1,2,3,4,5,6,7]
>>> [x for x in list if not x == list[i]]
[1, 2, 4, 5, 6, 7, 1, 2, 4, 5, 6, 7]

请注意 3 根本不在该列表中。

于 2012-12-03T15:28:29.840 回答
-3

Every other is

x[::2], start at 0
x[1::2], start at 1
于 2012-12-03T15:27:13.583 回答