66

我在弄清楚如何对 python 列表进行切片时遇到了一些麻烦,如下所示:

>>> test = range(10)
>>> test
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> test[3:-1]
[3, 4, 5, 6, 7, 8]
>>> test[3:0]
[]
>>> test[3:1]
[]
>>> test
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

据我了解,python slice 的意思是 lst[start:end],包括 start,不包括 end。那么我将如何从元素 n 开始查找列表的“其余部分”?

非常感谢您的帮助!

4

7 回答 7

102

您可以通过不指定值使切片的一端保持打开状态。

test[3:] = [3, 4, 5, 6, 7, 8, 9]
test[:3] = [0, 1, 2]
于 2009-03-07T05:19:31.193 回答
100

如果您使用变量作为范围端点,则可以使用None.

 start = 4
 end = None
 test[start:end]
于 2009-03-07T08:15:31.380 回答
15

简单地省略结尾。

test[n:]
于 2009-03-07T05:19:40.943 回答
5

当您想跳过某些内容时,省略结尾仍然有效:

range(10)[3::2] => [3, 5, 7, 9]
于 2016-01-28T16:14:17.953 回答
3

切片时也可以使用endNone参数的关键字。这也将返回直到列表末尾的元素(或任何序列,如元组、字符串等)

# for list
In [20]: list_ = list(range(10))    
In [21]: list_[3:None]
Out[21]: [3, 4, 5, 6, 7, 8, 9]

# for string
In [22]: string = 'mario'
In [23]: string[2:None]
Out[23]: 'rio'

# for tuple
In [24]: tuple_ = ('Rose', 'red', 'orange', 'pink', 23, [23, 'number'], 12.0)
In [25]: tuple_[3:None]
Out[25]: ('pink', 23, [23, 'number'], 12.0)
于 2018-07-17T03:52:18.007 回答
1

在起始值之后返回列表的一部分:

list = ['a','b','c','d']
start_from = 'b' # value you want to start with
slice = list[list.index(start_from):] # returns slice from starting value to end
于 2017-08-29T13:22:34.510 回答
0

您正在寻找的是使用类似的东西:

inputs = "ababbbaAab"
for i in range(n):
    print(i, inputs[:i] + inputs[i:i+1])

输出:

0 a
1 ab
2 aba
3 abab
4 ababb
5 ababbb
6 ababbba
7 ababbbaA
8 ababbbaAa
9 ababbbaAab

看看如果i == 0

然后inputs[:i] == []inputs[i:i+1] == a

而如果i == len(inputs) - 1

然后inputs[:i] == [ababbbaAa]inputs[i:i+1] == b

于 2020-09-30T22:35:47.497 回答