切片和附加列表会在末尾留下额外的值

问题描述 投票:0回答:3

我想将两个数组中前80%的值附加到一个新数组中。我可以找到解决这个问题的方法,但是当我尝试在一行中完成这个问题时我遇到了这个问题而且我很想知道它是否可行。

# I create my two arrays
a = [1,2,3,4,5]
b = [6,7,8,9,10]

# Showing what slicing a and b in this way returns
# 4 in this case is equal to 80%
a[:4]
[1, 2, 3, 4]
b[:4]
[6, 7, 8, 9]

# Append 80% of b to 80% of a 
a[:4] += b[:4]

# Print a
# There is a 5 at the end which I don't want to be there :(
a
[1, 2, 3, 4, 6, 7, 8, 9, 5]

我明白我的一行正在做的是告诉python插入80%的b,80%的通过a,但实际上并不是只保留80%的a。

有没有办法做到这一点,然后不必删除后续的20%?

python list slice
3个回答
2
投票

你写的是像a[:4] = a[:4] + b[:4],你离开a的最后一个指数(即5),没有变化。你可以认为它有点像插入(没有创建嵌套列表),即

>>> a = [1,2,3,4,5]
>>> a.insert(4, b[:4])
>>> a
[1, 2, 3, 4, [6, 7, 8, 9], 5]

根据需要修改相同列表的解决方案是不仅要分配给a[:4],还要分配给整个列表:

>>> a[:] = a[:4] + b[:4]
>>> a
[1, 2, 3, 4, 6, 7, 8, 9]

0
投票
a[:4] += b[:4]

使用这个等式,你基本上将b [6,7,8,9]的前4个元素添加到[1,2,3,4],使[5]的最后一个元素保持不变。你可以省略[5]的最后一个索引

c = a[:4] + b[:4]

0
投票
# I create my two arrays
a = [1,2,3,4,5]
b = [6,7,8,9,10]

a=a.copy()[:4]+b.copy()[:4]
# output [1, 2, 3, 4, 6, 7, 8, 9]

浅拷贝,对象的引用被复制到其他对象中。这意味着对对象副本所做的任何更改都会反映在原始对象中。在python中,这是使用“copy()”函数实现的。

创建了a和b的浅表副本然后,我从它获取前4个元素并附加b元素。

© www.soinside.com 2019 - 2024. All rights reserved.