我想生成同一個句子的 100 個副本的串列,每個副本中修改了一個字符。我目前正在學習 python,我不明白為什么會這樣:
def generate_copy(seq):
copies = [seq for i in range(100)]
for copy in copies:
copy[random.randint(0, len(seq) - 1)] = random.choice(char_list)
print(''.join(copy))
return copies
修改所有副本。我想得到這樣的東西:['AAAB', 'BAAA', 'ZAAA', ...],就像它們彼此獨立,但我得到:['AAAB', 'ZAAB', 'ZCAB' , ...]。我該怎么做?
uj5u.com熱心網友回復:
不知道你是如何得到你粘貼的結果 -string在 python 中是不可變的。copies是 的串列strings。copy字串也是如此。你不能打字,copy[0] = 'a'因為你會得到TypeError: 'str' object does not support item assignment原因。
您想要做的是在創建copies.
def change_random_letter(seq, char_list):
i = random.randint(0, len(seq) - 1)
new_letter = random.choice(char_list)
return f"{seq[:i]}{new_letter}{seq[i 1:]}"
def generate_copy(seq):
copies = [change_random_letter(seq, char_list) for _ in range(100)]
return copies
編輯:我注意到你將 list 作為seq. 如果是這樣,copies都不是副本!看
l = [1, 2]
ll = [l, l]
ll[0][0] = "A"
print(ll) # [['A', 2], ['A', 2]]
當型別是可變的時,通過使用變數,您可以使用參考。所以所有copies元素都指向記憶體中的同一個地方。您需要使用copy串列功能。
copies = [seq.copy() for _ in range(100)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/392102.html
上一篇:HDFSHAyarnspark-submit上的這個錯誤是什么
下一篇:連續數之和
