用不断变化的字符串值填充数组



我想用单词后缀填充数组,同时用它们的索引创建字典。在循环中,我执行以下操作:

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()&quot构建列表的情况。以下是对您看到的意外结果的一些解释,它与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)

最新更新