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

时间:2016-07-24 12:06:19

标签: python list slice

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

我知道

my_list = my_list[:] 

会给我一个相同的列表,

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

似乎做同样的事情。

但问题是,有时我想增加参数,但我不能将1添加到无。 (开始看起来不是问题,因为我可以将它初始化为0。)

我希望有类似的东西:

 my_list[start: end + offset]

有时候我甚至想要一直坚持在那里,比如

my_list[start: end -1 + offset]

我写这篇文章时很累,如果这很容易就道歉。

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

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

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

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

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等),但这对我来说已经足够好了。

2 个答案:

答案 0 :(得分:2)

你不能和无。 但是,您可以将其他数字相加,例如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'相同,但由于它的数据类型,你可以增加和减少它的值。 end len(my_list),它返回一个表示列表长度的整数,因此也是结尾。因为它是一个整数,所以你也可以增加/减少该值。

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

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

请参阅?我有点'逆转'开始结束,通过使结束为正,并开始消极。

输出所有代码:

[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]

答案 1 :(得分:0)

Python支持负偏移来指定距离列表末尾的距离(-1是最后一个字符),所以如果你有类似的东西:

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

它会打印Hello

你也可以这样做:

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

它会打印world