2016-07-24 97 views
3

我有一个函数列表,我想有时使用整个事情,有时只是一个部分取决于偏移量变量。有时我想将偏移量应用于开始,有时结束。如何将变量放入列表切片操作中?

我知道

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] 

我很累,因为我写这个很抱歉,如果这很容易。

编辑 - 我的最终溶液....

我随后与改变我的偏移可变进的思想相结合使用(如在溶液中所描述的)的结束参数的长度的想法两个变量。细节如下...

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

因为我想要在不同的地方以不同的方式使用偏移量,所以我发现必须处理偏移量,以前两个变量...

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等),但这足以为我工作。

+0

你就不能设置'结束= LEN(my_list)'? –

回答

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) 

(前四个输出完全一样,以示区别,它是如何工作的)。

这样你可以很容易地改变参数。因为开始只是'0',和'None'一样,但由于它的数据类型,你可以增加和减少它的值。 和结束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

谢谢。我结束了在最终参数中使用len(my_list)。我会把我的最终代码的细节放在我的问题的编辑中,以防其他人帮忙。 – Mel

0

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

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

这将打印Hello

你也可以这样做:

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

它将打印world