Заполнение массива изменяющимся строковым значением

#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 , of suff_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)