繁体   English   中英

有没有更有效的方法将列表从另一个列表的中心切出?

[英]Is there a more efficient way to slice a list out of the center of another list?

我写了这段代码来从另一个列表的中心切出一个列表,它似乎有效,但我觉得有可能更整洁、更有效地做到这一点(可能通过列表理解)?

def get_middle(num, val_list):
    idx_val = (int(num/2) , int(num/2 + num%2))
    center_idx = int((len(val_list) - 1)/2)
    idx_one, idx_two = center_idx-idx_val[0], center_idx+idx_val[1] 
    return val_list[idx_one:idx_two]


test_list = [1,2,3,4,5,6,7]
test_num = 3
new_list = get_middle(test_num , test_list )
print(new_list)

上面代码的输出是: [3, 4, 5]

代码:

def get_middle(num, sequence):
    m = (len(sequence) - 1)//2 - num//2
    return sequence[m:m+num]


test_list = [1, 2, 3, 4, 5, 6, 7]
test_num = 3
print(get_middle(test_num, test_list))

输出:

[3, 4, 5]

是的,您可以在一行中完成。

test_list[len(test_list)//2-test_num//3:len(test_list)//2+test_num//3+1]

当然还要根据test_num的奇偶校验和列表长度的奇偶校验做一些调整。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM