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

2024-04-23 13:39:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将两个数组中前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。你知道吗

有没有一种方法可以做到这一点,而不必在之后除去a的最后20%呢?你知道吗


Tags: ofto方法代码inismycreate
3条回答
# 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]

浅拷贝,一个对象的引用被拷贝到另一个对象中。 这意味着对object副本所做的任何更改都会反映在原始object中 t、 在python中,这是使用“copy()”函数实现的。你知道吗

创建了一个a和b的浅拷贝然后,我从它和它的前4个元素 用a附加b元素。你知道吗

你写的东西就像a[:4] = a[:4] + b[:4],你把a(即5)的最后一个索引保持不变。你可以认为它有点像一个insert(不创建嵌套列表),即

>>> 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]
a[:4] += b[:4]

用这个等式,你基本上是把b[6,7,8,9]的前4个元素加到a[1,2,3,4]上,留下a[5]的最后一个元素不变。您可以省略[5]的最后一个索引,方法是

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

相关问题 更多 >