1번은 내가 떠올린 코드이고, 분명 다른 방법이 있을 것 같아서 검색해보니 재밌는 아이디어가 있어서 정리해 보았다.
S = input()
nums = [-1] * 26
for i in range(len(S)):
if nums[ord(S[i])-97] == -1:
nums[ord(S[i])-97] = i
print(*nums)
S = input()
alp = "abcdefghijklmnopqrstuvwxyz"
for i in alp:
if i in S:
print(S.index(i), end=' ')
else:
print(-1, end=' ')
파이썬은 알파벳의 자리를 찾을 때 이런 식으로 알파벳을 나열한 리스트를 자주 사용하는 것 같다.
S = input()
alp = "abcdefghijklmnopqrstuvwxyz"
for i in alp:
print(S.find(i), end=' ')
for문을 직접 작성하지 않고 해당 알파벳이 S에 있으면 바로 출력하도록 find()를 이용했다.
find()는 해당 알파벳이 존재하지 않으면 -1을 반환한다. 하지만, index()는 똑같이 해당 인덱스를 찾아주지만, 존재하지 않는 값을 매개변수로 전달하면 ValueError가 발생하므로 주의해야겠다.
또한, find()는 문자열에서만 사용 가능하여 리스트, 튜플, 딕셔너리 자료형에서 사용 시 에러 발생한다. index()는 문자열, 리스트, 튜플에서 사용 가능해서 딕셔너리 자료형에서 사용 시 에러 발생한다.

아래서부터 1~3번 코드이다. 모두 메모리와 시간이 똑같다!