Нарезка и добавление списков оставляет дополнительные значения в конце - PullRequest
0 голосов
/ 25 марта 2019

Я хочу добавить первые 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% a после этого?

Ответы [ 3 ]

2 голосов
/ 25 марта 2019

То, что вы пишете, похоже на 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 голосов
/ 25 марта 2019
a[:4] += b[:4]

С помощью этого уравнения вы в основном добавляете первые 4 элемента b [6,7,8,9] к a [1,2,3,4], оставляя последний элемент a [5] нетронутым.Вы можете опустить последний индекс [5], выполнив

c = a[:4] + b[:4]
0 голосов
/ 25 марта 2019
# 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 с помощью a.

...