我做了一個腳本:
our_word = "Success"
def duplicate_encode(word):
char_list = []
final_str = ""
changed_index = []
base_wrd = word.lower()
for k in base_wrd:
char_list.append(k)
for i in range(0, len(char_list)):
count = 0
for j in range(i 1, len(char_list)):
if j not in changed_index:
if char_list[j] == char_list[i]:
char_list[j] = ")"
changed_index.append(j)
count = 1
else:
continue
if count > 0:
char_list[i] = ")"
else:
char_list[i] = "("
print(changed_index)
print(char_list)
final_str = "".join(char_list)
return final_str
print(duplicate_encode(our_word))
本質上,此腳本的目的是將字串轉換為新字串,其中新字串中的每個字符都是“(”,如果該字符在原始字串中只出現一次,或者“)”,如果該字符出現多次在原始字串中。我制作了一個相當分層的腳本(我對 python 語言相對較新,所以不想使用任何有用的內置函式)來嘗試這樣做。我的問題是,在我檢查當前索引是否以前被編輯過(為了防止它改變)的地方,它似乎忽略了它。)())())所以我得到的不是預期的)()((((。我真的很感謝一個有見地的答案,為什么我會遇到這個問題以及解決這個問題的方法,因為我正在嘗試收集有關 python 的直觀知識。謝謝!
uj5u.com熱心網友回復:
word = "Success"
print(''.join([')' if word.lower().count(c) > 1 else '(' for c in word.lower()]))
uj5u.com熱心網友回復:
這里的問題與你對 Python 的理解無關。這純粹是演算法。如果您保留此“分層”演算法,則必須在“i”回圈中再添加一個檢查。
our_word = "Success"
def duplicate_encode(word):
char_list = list(word.lower())
changed_index = []
for i in range(len(word)):
count = 0
for j in range(i 1, len(word)):
if j not in changed_index:
if char_list[j] == char_list[i]:
char_list[j] = ")"
changed_index.append(j)
count = 1
if i not in changed_index: # the new inportant check to avoid reversal of already assigned ')' to '('
char_list[i] = ")" if count > 0 else "("
return "".join(char_list)
print(duplicate_encode(our_word))
uj5u.com熱心網友回復:
char_list如果您避免同時用作輸入和輸出,您的演算法可以大大簡化。相反,您可以創建一個默認填充的相同長度的輸出串列(,然后僅在找到重復項時更改元素。對于每個字符,回圈將簡單地遍歷整個輸入串列一次,以尋找任何匹配項(除了自我匹配項)。如果找到一個,則可以更新輸出串列,內部回圈將中斷并移動到下一個字符。
最終代碼應如下所示:
def duplicate_encode(word):
char_list = list(word.lower())
output = list('(' * len(word))
for i in range(len(char_list)):
for j in range(len(char_list)):
if i != j and char_list[i] == char_list[j]:
output[i] = ')'
break
return ''.join(output)
for our_word in (
'Success',
'ChJsTk(u cIUzI htBp@qX)OTIHpVtHHhQ',
):
result = duplicate_encode(our_word)
print(our_word)
print(result)
輸出:
Success
)())())
ChJsTk(u cIUzI htBp@qX)OTIHpVtHHhQ
))(()(()))))())))()()((())))()))))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/506277.html
標籤:Python 数组 python-3.x 循环 迭代
上一篇:VBA僅找到1個匹配項/出現
