Есть ли более эффективный способ вырезать список из центра другого списка? - PullRequest
1 голос
/ 05 января 2020

Я написал этот код, чтобы вырезать список из центра другого, и он, кажется, работает, но я чувствую, что возможно сделать это более аккуратно и эффективно (возможно, с использованием списка)?

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]

Ответы [ 2 ]

1 голос
/ 05 января 2020

Код:

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]
0 голосов
/ 05 января 2020

Да, вы можете сделать это в одной строке.

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

Конечно, необходимо выполнить некоторые корректировки в зависимости от четности test_num и четности длины списка.

...