Разделение строки на отдельные символы с помощью нарезки - PullRequest
5 голосов
/ 29 апреля 2020

Я запутался, как следующий код python работает, чтобы разделить строку на отдельные символы, используя b[:0] = a. Разве это не должно быть просто b = ['abc']?

a='abc'
b=[]
b[:0]=a
print(b)

выход:

b=[a,b,c]

Ответы [ 3 ]

2 голосов
/ 29 апреля 2020

Это потому, что конструктор списка можно использовать для разбиения любых итераций, например строк.

Вам даже не нужно [:0],

list(a) # ['a', 'b', 'c']

или

b = []
b[:] = a # ['a', 'b', 'c']
1 голос
/ 29 апреля 2020

Согласно Python Делать c всякий раз, когда левая сторона оператора присваивания выполняет срез, python до __setitem__, поэтому в этом случае он помещает правые элементы в начало среза. взгляните на этот пример:

>>> a = [1,2,3,4]
>>> b = [5,6,7,8]
>>> b[3:5] = a
>>> print(b)
[5, 6, 7, 1, 2, 3, 4]
0 голосов
/ 29 апреля 2020

Здесь играют две вещи

Когда вы делаете

b[:0] = <something>

Что-то вставляется в начало списка (это добавление к фрагменту списка)

Если вы сделали

b[1:3] = ['a', 'b', 'c']

Затем элементы по индексам 1 и 2 заменяются элементами справа

Попробуйте выполнить следующее:

b = []
b[:0] = [1, 2, 3]

Вы заметите элементы справа, вставленные в начало списка

Теперь, когда вы делаете

b[:0] = "abc"

Поскольку элементы справа должны быть последовательностью строка распаковывается в ['a', 'b', 'c'] и затем вставляется в начало списка

...