#python #arrays
#python #массивы
Вопрос:
Я хочу заполнить массив суффиксами слов при создании словаря с их индексами. В цикле я делаю следующее:
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
Словарь заполнен правильно, однако массив заполнен только 1-й буквой.
[['H', 0], ['H', 0], ['H', 0], ['H', 0], ['H', 0], ['H', 0]]
{'HELLO': 1, 'HELL': 2, 'HEL': 3, 'HE': 4, 'H': 5}
Не могли бы вы помочь мне найти проблему?
Комментарии:
1. Ваш код не завершен. Каково начальное значение
j
, ofsuff_arr
, … etc ?
Ответ №1:
Я думаю, может быть, это то, что вы ищете.
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)
Я действительно не понимаю, почему у вас будут вложенные списки с нулем, но если вы хотите, вы могли бы сделать это так:
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]
Ответ №2:
Поскольку данные в этом вопросе неясны, я не могу точно угадать, что вы пытаетесь сделать. Но, насколько я понимаю, это может помочь вам.
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
Ответ №3:
Во-первых, как указывалось в предыдущих ответах, это случай для создания вашего списка с помощью «append ()». Вот некоторое объяснение неожиданных результатов, которые вы видели, это связано с тем, как Python хранит и ссылается на объекты в памяти. Скопируйте и запустите приведенный ниже код, это моя попытка показать, почему вы получали неожиданные результаты в своем списке. Функция «id ()» в Python возвращает уникальный идентификатор объекта, и я использую его, чтобы показать, где значения списка хранятся в памяти.
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)