我需要编写一个将任何列表拆分为两个相等部分的函数。如果列表的长度是偶数,我想把它分成两部分,如果列表的长度是奇数,我想忽略中心元素。
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]
但是这种方法对偶数和奇数长度都不起作用。 有没有办法为此目的使用切片,或者没有办法,最好使用循环/迭代?
答案 0 :(得分:4)
试试这个
length = len(list)
half = int(length/2)
first_half = list[:half]
second_half = list[length-half:]
这里的技巧是在奇数
时将十进制数减半答案 1 :(得分:2)
对列表的长度使用divmod
和2.右边的切片取自商和余数之和:
lst = [1,100,50,-51,1,1]
s = divmod(len(lst), 2)
left = lst[:s[0]]
right = lst[sum(s):]
答案 2 :(得分:2)
如何在右半部分使用否定索引?
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])
答案 3 :(得分:0)
inline
如果你想要一个功能:
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)
list [:: 2]从第0个元素开始获取列表中的每个第二个元素。 list [1 :: 2]从第一个元素开始获取列表中的每个第二个元素。