Вы заменяете объект списка каждый шаг вашего цикла . Оператор res = []
создает новый пустой объект списка, затем добавляет в этот список одну букву.
Без цикла это то, что вы делаете:
>>> x = 's'
>>> res = []
>>> res.extend(x)
>>> res
['s']
>>> x = 'p'
>>> res = []
>>> res.extend(x)
['p']
>>> x = 'a'
>>> res = []
>>> res.extend(x)
>>> res
['a']
>>> res = []
>>> x = 'm'
>>> res.extend(x)
>>> res
['m']
Создайтесписок вне цикла, один раз :
string = 'spam'
res = []
for x in string:
res.extend(x)
print(res)
Теперь вы не продолжаете заменять объект списка новым на каждую итерацию for
loop.
Опять же, удалив цикл и выполнив шаги вручную, теперь мы имеем:
>>> res = []
>>> x = 's'
>>> res.extend(x)
>>> res
['s']
>>> x = 'p'
>>> res.extend(x)
>>> res
['s', 'p']
>>> x = 'a'
>>> res.extend(x)
>>> res
['s', 'p', 'a']
>>> x = 'm'
>>> res.extend(x)
>>> res
['s', 'p', 'a', 'm']
Не то, чтобы вы использовали здесь res.extend()
;это работает только потому, что отдельные буквы в string
, присвоенные x
, также являются строками, и даже однобуквенные строки все еще являются последовательностями. То, что вы действительно делаете с res.extend(x)
, эквивалентно for element in x: res.append(element)
, но x
всегда будет иметь только один элемент.
Так что это тоже будет работать:
string = 'spam'
res = []
for x in string:
res.append(x)
print(res)
илипросто добавьте res
к целому string
значению:
string = 'spam'
res = []
res.extend(string)
print(res)
или, если вы просто хотели получить список всех символов строки, просто используйте функцию list()
:
string = 'spam'
res = list(string)
print(res)
list()
делает именно то, что вы хотели сделать с вашим циклом: создать пустой список, перебрать ввод и добавить каждый элемент в новый список, который затем возвращается:
>>> string = 'spam'
>>> list(string)
['s', 'p', 'a', 'm']