列出python每隔一个值的切片

时间:2012-12-03 15:25:17

标签: python slice

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

7 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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'

答案 2 :(得分: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]也是一个选项。

答案 3 :(得分:0)

>>> x = [1, 2, 3]
>>> x[:1] + x[2:]
[1, 3]

答案 4 :(得分:-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]

答案 5 :(得分:-2)

所以你想要除索引值之外的每个值: 我在哪里索引:

>>> 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根本不在该列表中。

答案 6 :(得分:-3)

彼此是

x[::2], start at 0
x[1::2], start at 1