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

Python 用切片将列表分成两个相等的部分,python,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] 但这种方法不适用于偶数和奇数长度。

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

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]
但这种方法不适用于偶数和奇数长度。 有没有办法使用切片来达到这个目的,或者没有办法,最好使用循环/迭代?

试试这个

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

这里的诀窍是,当十进制数为奇数时,将其减半,并在列表长度上使用
divmod
,然后使用2。右切片取自商和余数之和:

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

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

在右半部分使用负索引怎么样

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])
A=[1,2,3,4,5,6]
B=A[:len(A)/2]
C=A[len(A)/2::

如果您想要一个函数:

def拆分列表(a列表):
一半=len(a_列表)/2
返回一个_列表[:half],一个_列表[half:]
A=[1,2,3,4,5,6]
B、 C=拆分列表(A)

如果你不在乎订单

def拆分(列表):
返回列表[::2] 返回列表[1::2]

list[::2]获取列表中从第0个元素开始的第二个元素。
列表[1::2]从第一个元素开始获取列表中的每一个第二个元素。

我想你左右颠倒了…什么是
x
,在
s=len(x)/2
?@Kevin这是旧代码,抱歉。此处x=list。请不要使用Python关键字来命名变量(此处
list
)是的,此处仅错误地使用了“list”名称。谢谢我没有否决它,但这种方法对奇数列表不起作用:f([1100,50,-51,1])->[170]:([-51,1],[1100,50])@Paul如果不起作用,我就不会发布了。你应该试试看。我没有投反对票,但可能其他人投了反对票,因为
x
没有定义,而且这样更可读:
商,余数=divmod(len(lst),2)
左=lst[:商]
右=lst[商+余数:@Guillaume谢谢你的眼睛。从我的终端复制而来,但当A是[1,2,3,4,5]时,C是[3,4,5]。OP希望它只是[4,5]。也行!谢谢我建议使用
length//2
而不是
int(length/2)
最佳答案IMHO,只需注意
/
操作符,它根据python版本的不同具有不同的行为。对于版本间兼容性,考虑使用<代码> //< /代码>运算符。@纪尧姆:Heck,它在Py2上有不同的行为,这取决于“<代码Fuuturuy导入分区< /代码>”是否生效。我倾向于在所有Python代码中使用适当的
/
,无论它是针对Py2还是Py3(无论是否支持
\uuuuuuuuu future\uuuuuu
导入)。