使用切片将列表分成两个相等的部分

时间:2016-09-27 14:11:09

标签: python

我需要编写一个将任何列表拆分为两个相等部分的函数。如果列表的长度是偶数,我想把它分成两部分,如果列表的长度是奇数,我想忽略中心元素。

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]

但是这种方法对偶数和奇数长度都不起作用。 有没有办法为此目的使用切片,或者没有办法,最好使用循环/迭代?

4 个答案:

答案 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]从第一个元素开始获取列表中的每个第二个元素。