Линейное понимание не работает правильно в python - PullRequest
0 голосов
/ 03 мая 2020

Я хочу знать, почему код, указанный ниже, не работает должным образом. Он должен напечатать «Привет», но он не печатает его. Пожалуйста, изучите этот вопрос. Заранее спасибо.

a=['{','}']
a=[(s.replace('{','H'),s.replace('}','i'))for s in a]
print(a)

Ответы [ 4 ]

3 голосов
/ 03 мая 2020

Используйте следующее:

a=['{','}']
a=[(s.replace('{','H').replace('}','i'))for s in a]
print(a)

Вывод:

['H', 'i']
0 голосов
/ 03 мая 2020

Есть несколько вещей, чтобы быть с. 1. Вы пытаетесь вернуть кортеж, а не строку, поэтому «Привет» невозможно. Вы получите '[(' H ',' {'), ('} ',' i ')]'. 2. Для строки попробуйте код ниже. Вы должны попробовать заменить в списке, который уже заменен, а затем извлечь строку из него.

a=['{','}'] a=[s.replace('{', "H") for s in a] a=[s.replace('}',"i") for s in a] print("".join(a))

ниже приведен однострочный код с тем же результатом.

a=['{','}'] print("".join([s.replace('{', "H").replace("}", "i") for s in a]))

0 голосов
/ 03 мая 2020

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

[s.replace('}','i').replace('{','H') for s in a]
0 голосов
/ 03 мая 2020

Работает нормально. В первом элементе списка встречается '{', который вычисляется как 'H' на s.replace('{','H'), хотя '{' остается тем же, применяя s.replace('}','i'), поскольку закрывающая скобка ('}') не встречается. Следовательно, результатом будет ('H','{').

Те же логики c для второго элемента списка.

...