我已经在这里看到了很多Python列表切片问题,我不认为我在重复任何东西,尽管它涉及到许多相同的问题。我的问题与使用切片缩短列表、创建新列表和更新原始列表有关。
我的任务是定义一个接受两个参数(word_list, num)并使用切片操作word_list的Class方法。我一直在切片,直到word_list为空,将每个切片存储在一个新的列表中。就切片的内容而言,我从哪一端切片并不重要,重要的是我可以保持切片并保持事件的准确记录。
请执行以下操作:
word_list = ["once", "upon", "a", "time", "there", "lived", "an", "old", "man"]
sub_list1 = word_list[:2] # ["once", "upon"]
word_list = word_list[2:] # ["a", "time", "there", "lived", "an", "old", "man"]请将此与
word_list = ["once", "upon", "a", "time", "there", "lived", "an", "old", "man"]
sub_list2 = word_list[-2:] # ["old", "man"]
word_list = word_list[:-2] # ["once", "upon", "a", "time", "there", "lived"]在上面的第一个例子中,列表元素在获取切片时被“向下分流”,而第二个例子中,列表只是变短了,没有任何东西“移动”。我是在发明一个问题,还是以不同的方式对word_list进行切片有任何实际的影响?
发布于 2020-02-04 02:00:56
扩展切片语法的工作方式是创建一个slice对象以传递给适当的__getitem__方法。foo[x:y:z]变成了foo.__getitem__(slice(x, y, z))。
对于缺少的值,不做任何假设;值None被简单地传递给slice。所以你的表情变成了
word_list[:2]   -> word_list.__getitem__(slice(None, 2, None))
word_list[2:]   -> word_list.__getitem__(slice(2, None, None))
word_list[:-2]   -> word_list.__getitem__(slice(None, -2, None))
word_list[-2:]   -> word_list.__getitem__(slice(-2, None, None))如何处理每个None值由__getitem__的实现决定。通常,上下文会被考虑在内。如果步骤是正的,则将缺少的开始视为0;如果步骤为负,则将其视为-1。不管开始和停止位置如何,缺少的步骤通常缺省为1;这就是为什么像foo[10:0]这样的东西是空的,而不是假设您想使用-1的步骤。
发布于 2020-02-04 01:52:03
我不确定我是否理解了你的问题,但我看不出你的第一个和第二个例子之间有任何实际的影响,这只是你的解释
你可以看一看性能是一样的:
import numpy as np
import struct
import sys
from simple_benchmark import BenchmarkBuilder
b = BenchmarkBuilder()
@b.add_function()
def positive_slicing(my_list):
    sub_list = my_list[:2]
    my_list = my_list[2:]
@b.add_function()
def negative_slicing(my_list):
    sub_list = my_list[-2:]
    my_list = my_list[:-2]
@b.add_arguments('slicing list')
def argument_provider():
    for exp in range(2, 7):
        size = 10**exp
        yield size, ['some random example'] * size
r = b.run()
r.plot()

https://stackoverflow.com/questions/60044155
复制相似问题