При присвоении сложенных строк с пробелом, результат выводится в 9-ти переменных вместо 3-х. Python
Допустим сам код на Python:
x = "tyr"
y = 'red'
result = []
for i in range(len(x)):
result.append((''.join(x[1] + (' - ') + y[1])).split())
print(result)
[['y', '-', 'e'], ['y', '-', 'e'], ['y', '-', 'e']]
Но если убрать пробеk:
result.append((''.join(x[1] + ('-') + y[1])).split())
[['y-e'], ['y-e'], ['y-e']]
Почему так происходит и как получить результат [['y - e'], ['y - e'], ['y - e']], но не через replace.
Ответы (2 шт):
На мой взгляд, в данном случае лучше всего использовать не запутанные join() и split(), а просто обернуть необходимые данные в f-строки — так будет и удобней, и понятней :)
x = "tyr"
y = 'red'
result = []
for i in range(len(x)):
result.append(f'{x[i]} - {y[i]}')
print(result)
# ['t - r', 'y - e', 'r - d']
P.S. Ещё Вы забыли поставить i как индекс строки, вместо него Вы писали 1.
UPD: а если говорить о вопросе "почему так происходит?", стоит разобрать данное выражение: ''.join(x[1] + (' - ') + y[1])).split(). Шаги для его обработки получаются следующие:
- Сначала выполняется
x[1] + (' - ') + y[1]. Все литералы строчные, так что скобки в данном случае убираются; - В результате данного выражения получится
'x - y'с пробелами, где x и y — соответствующие символы строк; - Функция
join()ничего не делает, поскольку она работает со списками строк, но здесь строка цельная; - Функция
split()же, наоборот, делит строку на список строк, основываясь на передаваемом ей аргументе. По умолчанию это пробел, так что функция превращает строку из п.2 в список, состоящий из 3 символов-строк.
При снятии пробела же получается строка 'x-y', и ни join(), ни split() ничего с ней не сделают, поэтому сама строка останется прежней.
x = 'tyr'
y = 'red'
z = [' - '.join(item) for item in zip(x, y)]
print(z)
# ['t - r', 'y - e', 'r - d']
Но меня смущает фраза в вопросе
как получить результат
[['y - e'], ['y - e'], ['y - e']]
[[' - '.join(item)] for item in zip(x, y)]
# [['t - r'], ['y - e'], ['r - d']]
Но если нужен прямо как в вопросе
[[f'{x[1]} - {y[1]}'] for _ in range(len(x))]
# [['y - e'], ['y - e'], ['y - e']]