#python #join
#python #Присоединиться
Вопрос:
Я пытался объединить три цифры (шестнадцатеричный код) в одну строку, и произошло что-то странное.
a='00'
b='01'
c='ff'
abc = ''.join(a).join(b).join(c)
print(abc)
и я получаю результат:
f0001f
вместо ожидаемого0001ff
Что может быть причиной этого?
Комментарии:
1. «.join() — это ваш разделитель для следующего соединения и так далее
2.
join()
обрабатывает его параметр как итерируемый. В вашем примере (т. Е. Вашемa
,b
иc
) параметр представляет собой набор из двух элементов, которые он помещает по обе стороны от строки, с которой он работает.
Ответ №1:
«join» объединяет все элементы в списке со строкой, по которой он был вызван.
Итак
",".join(['a', 'b', 'c']) = "a,b,c"
Итак, что вы на самом деле делаете в своем коде, это
''.join('00') -> "00"
'00'.join('01') -> "0001"
'0001'.join('ff') -> "f0001f"
Ответ №2:
Давайте посмотрим это шаг за шагом
''.join('00') => 0 '' 0 => 00
'00'.join('01') => 0 00 1 => 0001
'0001'.join('ff') => f 0001 f => f0001f
Комментарии:
1. Это ответ
Ответ №3:
Я думаю, вы неправильно поняли, что join()
делает.
''.join(a)
вернется 00
, поскольку он будет присоединять каждый символ a к пустой строке, ничего не делая.
Однако следующим вызовом будет, '00'.join(b)
который соединит каждый символ b
с 00
, что приведет к 0001
. Тогда '0001'.join(c)
даст вам f0001f
, потому что он объединяет символы из c
с 0001
Вероятно, вы искали следующее: ''.join([a, b, c])
который объединит три строки вместе с пустой строкой в качестве ее «разделителя».
Другим вариантом было бы простое a b c
. Это менее оптимизировано, но для таких коротких строк это вообще не должно иметь значения!
Ответ №4:
Вы можете попробовать (конкатенация строк. В этом нет необходимости join
.):
>>> a='00'
>>> b='01'
>>> c='ff'
>>> a b c
'0001ff'
Ответ №5:
Если вы используете Python 3.6 или новее, вы можете использовать так называемые f-строки для получения желаемого результата:
a='00'
b='01'
c='ff'
out=f'{a}{b}{c}'
print(out) #0001ff
Если вы хотите узнать больше о f-строках, я предлагаю прочитать это руководство.