如何将变量放入列表切片操作中?

How do I put variable in a list slicing operation?

我在一个函数中有一个列表,有时我想使用整个列表,有时只是一个取决于偏移量变量的部分。有时我想将偏移量应用到开始,有时是结束。

我知道

my_list = my_list[:] 

会给我同样的列表,

start= None
end = None
my_list[start:end] 

似乎在做同样的事情。

但麻烦的是,有时我想增加参数但我无法将None加1。 (开始似乎不是问题,因为我可以将其初始化为 0。)

我想要这样的东西:

 my_list[start: end + offset]

有时我什至想要一个常量卡在那里,比如

my_list[start: end -1 + offset]

写这篇文章时我很累,如果这很容易,我深表歉意。

编辑 - 我的最终解决方案....

我遵循了在结束参数中使用长度的想法(如解决方案中所述)结合将我的偏移变量更改为两个变量的想法。详情如下...

整个想法是我有一个函数可以比较两个列表中的元素。默认情况下偏移量为零,因此将一个中的第一个元素与另一个中的第一个元素进行比较。然后我想要一个偏移量,以便将一个中的第一个元素与另一个(或第三个等)的第二个元素进行比较

因为我想在不同的地方使用不同的偏移量,我发现我必须事先将偏移量处理成两个变量...

if offset < 0:
    neg_offset = abs(offset)
if offset > 0:
    pos_offset = offset

然后我将两个列表放入我的函数中,如下所示:当列表长度相同时...

get_list_comparison(my_first_list[pos_offset: len(my_first_list)-neg_offset], my_second_list[neg_offset: len(my_second_list)-pos_offset])

当第二个列表比第一个列表短时:

get_list_comparison(my_first_list[pos_offset:len(my_first_list)-1-neg_offset], my_second_list[neg_offset: len(my_second_list)-pos_offset])

当列表不均匀时,我想我可以计算出差异而不是对 -1(或 -2 等)进行硬编码,但这对我来说已经足够好了。

Python 支持负偏移量以指定距列表末尾的距离(-1 是最后一个字符),因此如果您有类似的内容:

s = "Hello world!"
print(s[:-6])

它将打印 Hello.

您还可以这样做:

s = "Hello world!"
print(s[-5:])

它会打印 world.

你无法求和 None。 但是,您可以求和其他数字,例如 0(开始)和 len(my_list)(结束)

my_list = [1,2,3,4,5,7,8,9,10]
print(my_list)

my_list = my_list[:]
print(my_list)

start1 = None
end1 = None
my_list = my_list[start1:end1]
print(my_list)


######################################
start2 = 0
end2 = len(my_list)
my_list = my_list[start2:end2]
print(my_list)

my_list = my_list[start2 + 3:end2 - 3]
print(my_list)

(前四个输出完全相同,以显示差异及其工作原理)。

这样您就可以轻松更改参数。因为 start 只是“0”,与 'None' 相同,但由于它的数据类型,您可以增加和减少它的值。 endlen(my_list),其中 returns 是一个表示列表长度的整数,因此也是结尾。因为它是一个整数,所以您也可以 increase/decrease 该值。

您可以做的另一件事是使用底片:

#####################################
###Using negatives
start3 = -3
end3 = +3
my_list = my_list[start3:end3]
print(my_list)

看到了吗?我有点 'reversed' start end end,让 end 为正,开始为负。

所有代码的输出:

[1, 2, 3, 4, 5, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 7, 8, 9, 10]
[4, 5, 7]
[4, 5, 7]