여러 목록을 반복하고 목록에 여러 항목이 있는지 확인하려고합니다. 그렇다면 그는 목록의 이름을 바꾸고 싶습니다.
두 개의 for 루프를 사용하여 루프를 시도했지만이 코드는 다중 목록이 아닌 단일 목록에 대해 완벽하게 작동합니다.
new_word = [['abc'],['out'],['pqr'],['abc']]
for i in range(len(new_word)-1):
word_counter = 1
for j in range(i+1, len(new_word)):
if new_word[i] == new_word[j]:
word_counter = word_counter + 1
new_word[j] = new_word[j] + "_" + str(word_counter)
if word_counter > 1:
new_word[i] = new_word[i] + "_1"
예상 :
[['abc_1'],['out'],['pqr'],['abc_2']]
실제 :
[['abc'],['out'],['pqr'],['abc']]
이것은 허용되는 답변보다 조금 더 장황하지만 원본 목록의 모든 항목을 한 번만 스캔합니다. 작은 목록 (<10000 개 항목) 및 중요한 응답 시간이없는 경우에는 문제가되지 않습니다 (예를 들어,이 결과를 HTTP 응답에 초당 여러 번 제공 할 필요가 없음).
from copy import deepcopy
def suffix_repeats(lst):
result = deepcopy(lst)
mapping = {}
for i, item in enumerate(lst):
mapping.setdefault(item[0], []).append(i)
for key, positions in mapping.items():
if len(positions) > 1:
for j, pos in enumerate(positions, 1):
result[pos][0] += f"_{j}"
return result
new_word = [['abc'],['out'],['pqr'],['abc']]
print(suffix_repeats(new_word))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다