Я практиковал программирование на Python на leetcode.Почему эти два почти одинаковых кода имеют разные эффективные (Python)?
Так что это проблема: https://leetcode.com/problems/reverse-vowels-of-a-string/
И это мой ответ:
def reverseVowels(s):
result = list(s)
v_str = 'aeiouAEIOU'
v_list = [item for item in s if item in v_str]
v_list.reverse()
v_index = 0
for i, item in enumerate(s):
if item in v_list:
result[i] = v_list[v_index]
v_index+=1
return ''.join(result)
Результат: Time Limit Exceeded
И я нашел очень похожий ответ в дискуссии:
def reverseVowels(s):
lst = list(s)
vowels_str = "aeiouAEIOU"
vowels_list = [item for item in lst if item in vowels_str]
vowels_list.reverse()
vowels_index = 0
for index, item in enumerate(lst):
if item in vowels_str:
lst[index] = vowels_list[vowels_index]
vowels_index += 1
return ''.join(lst)
Результат: Accepted
Это настолько странно. Я думаю, что эти два кода выглядят точно так же.
Разница в них - не что иное, как параметры.
Мне любопытно, почему эти коды вызывают отличные результаты.
Это не код питона. У вас не может быть 'return' вне' def'. Укажите ** полные ** определения, включая списки параметров. Также: попробуйте запустить код несколько раз ... часто бывает, что код работает так же быстро и передает ограничение времени только 50% времени. – Bakuriu
@Bakuriu Извините, я пропустил код раньше. Спасибо за ваше напоминание. Я много раз пробовал свой код. Но это всегда дает мне тот же результат. –