我想用单词后缀填充数组,同时用它们的索引创建字典。在循环中,我执行以下操作:
for i in range(len(s)):
suf = s[:j]
suff_dict.update({suf: i})
suff_arr[i][0] = suf
suff_arr[i][1] = 0
j -= 1
字典被正确填充,但是数组只被第一个字母填充。
[['H', 0], ['H', 0], ['H', 0], ['H', 0], ['H', 0], ['H', 0]]
{'HELLO': 1, 'HELL': 2, 'HEL': 3, 'HE': 4, 'H': 5}
你能帮我找到一个问题吗?
我想也许这就是你要找的。
s='HELLO'
suff_arr=[]
suff_dict={}
for i in range(len(s)):
suf = s[i:]
suff_dict.update({suf: i})
suff_arr.append(suf)
print(suff_arr, suff_dict)
我真的不明白为什么你要用一个0嵌套列表,但是如果你想要,你可以这样做:
s='HELLO'
suff_arr=[]
suff_dict={}
for i in range(len(s)):
suf = s[i:]
suff_dict.update({suf: i})
suff_arr.append([suf,0])
print(suff_arr, suff_dict)
你还说你想要单词后缀而不是前缀,所以我也改变了。如果需要前缀,只需将s[i:]
替换为s[:i+1]
由于这个问题中的数据是不清楚的,我不能确切地猜出你想做什么。但据我所知,这可能对你有帮助。
s = 'HELLO'
suff_dict = {}
j=len(s)
suff_arr = []
for i in range(len(s)):
suf = s[:j]
suff_dict.update({suf: i})
suff_arr.append([suf,0])
j -= 1
首先,正如前面的答案所指出的,这是使用"append()"构建列表的情况。以下是对您看到的意外结果的一些解释,它与Python如何在内存中存储和引用对象有关。复制并运行下面的代码,这是我试图展示为什么你在列表中得到意想不到的结果。"id()";函数返回对象的唯一标识符,我用它来显示列表值在内存中的存储位置。
print('**** Values stored directly in list. ****')
arr = [0] * 3
print('All the items in the list refer to the same memory address.')
c = 0
for item in arr:
print(f'arr[{c}] id = ', id(item))
c += 1
print('n')
for i in range(len(arr)):
arr[i] = i
print('As values are updated, new objects are created in memory:')
c = 0
for item in arr:
print(f'arr[{c}] id = ', id(item))
c += 1
print('And we see the results we expect:')
print(arr)
print('n')
print('**** Values stored in sub list. ****')
arr = [[0]] * 3
print('All the items in the list refer to the same memory location.')
c = 0
for item in arr:
print(f'arr[{c}] id = ', id(item))
c += 1
print('n')
for i in range(len(arr)):
arr[i][0] = i
print('The same memory address is repeatedly overwritten.')
c = 0
for item in arr:
print(f'arr[{c}] id = ', id(item))
c += 1
print('n')
print('And we say "Wut??"')
print(arr)