Отдельный список на две равные части с фрагментами

-6

Мне нужно написать функцию, которая разбивает любой список на две равные части. Если длина списка четная, я хочу просто разделить ее на две части, и если длина списка нечетна, я хочу игнорировать центральный элемент.

So [1,2,3,4,5,6] => [1,2,3] and [4,5,6]
and [1,2,3,4,5] => [1,2] and [4,5]

Я попытался сделать следующее:

list = [1,100,50,-51,1,1]
s = len(list)/2
left = list[s+1:]
right = list[:s]

Но этот подход не работает как для четной, так и для нечетной длины. Есть ли способ использовать срезы для этой цели или нет способа, и лучше использовать циклы/итерации?

спросил(а) 2021-01-25T15:37:08+03:00 4 месяца, 4 недели назад
1
Решение
100

Попробуй это

length = len(list)
half = int(length/2)
first_half = list[:half]
second_half = list[length-half:]

Трюк здесь сокращает десятичную половину, когда она нечетная

ответил(а) 2021-01-25T15:37:08+03:00 4 месяца, 4 недели назад
78

Как насчет использования отрицательной индексации в правой половине?

def separate(seq):
s = len(seq)/2
left = seq[:s]
right = seq[-s:]
return left, right

print separate([1,2,3,4,5,6])
#result: ([1, 2, 3], [4, 5, 6])
print separate([1,2,3,4,5])
#result: ([1, 2], [4, 5])

ответил(а) 2021-01-25T15:37:08+03:00 4 месяца, 4 недели назад
77

Используйте divmod по длине списка и 2. Правый срез берется из суммы частного и остального:

lst = [1,100,50,-51,1,1]

s = divmod(len(lst), 2)
left = lst[:s[0]]
right = lst[sum(s):]

ответил(а) 2021-01-25T15:37:08+03:00 4 месяца, 4 недели назад
46

A = [1,2,3,4,5,6] B = A[:len(A)/2] C = A[len(A)/2:]

Если вы хотите использовать функцию:

def split_list(a_list): half = len(a_list)/2 return a_list[:half], a_list[half:] A = [1,2,3,4,5,6] B, C = split_list(A)

Если вы не заботитесь о заказе...

def split(list):
return list[::2] return list[1::2]

list [:: 2] получает каждый второй элемент в списке, начиная с 0-го элемента. list [1 :: 2] получает каждый второй элемент в списке, начиная с 1-го элемента.

ответил(а) 2021-01-25T15:37:08+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема