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

问题描述 投票:1回答:2

我编写了这段代码以将列表切成另一个列表的中心,并且似乎可以正常工作,但是我觉得可能可以更整齐,更有效地执行此操作(可能是通过列表理解)?

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]

python list list-comprehension slice
2个回答
1
投票

代码:

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]

-1
投票

是,您可以一行完成。

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

当然,必须根据test_num的奇偶性和列表长度的奇偶性进行一些调整。

© www.soinside.com 2019 - 2024. All rights reserved.