endswith
более эффективен, так как не требует дополнительного места (кроме того, что оба сравнения строк используют внутри) и может останавливаться на первом неравном символе. И вам не нужно указывать длину. И это, вероятно, понятнее людям, которые менее привыкли к разрезанию обозначений. А также более понятный и менее подверженный ошибкам, чем, например, x[-31:] == "toolongtoimmediatelyseethelength"
.
. Срез занимает дополнительное пространство, полностью создается до того, как будет сравнен даже первый символ, и вам необходимо указать длину. Но лучше, когда вы играете в гольф с кодом.
Если потенциальная конечная строка не жестко закодирована, сравнение срезов даже имеет небольшую ошибку. В то время как x[-1:]
получает суффикс длины 1, x[-0:]
делает не , а суффикс длины 0, но всю строку. Таким образом, x[-len(s):] == s
завершается ошибкой, когда s
пусто, но x
нет, где оно становится x[0:] == ''
и приводит к False
. Правильный результат тривиален True
, и x.endswith(s)
получает его. Я также только что использовал это в другом ответе , где мне не нужен особый случай для случаев без наложения, но ответ, сравнивающий фрагменты .