Скажем, у меня есть следующий список слов
words = ["arid", "dash", "drain", "thread"]
и пустой список списков:
a=[[]]*7
Я хочу поместить эти слова в список списков, чтобы длина каждого слова определяла позицию списка, к которому они добавлены.
Например, поскольку "arid" имеет длину 4, он будет продолжаться:
a=[[],[],[],[],["arid"],[],[]]
"тире" также имеет длину 4, поэтому она будет продолжаться:
a=[[],[],[],[],["arid", "dash"],[],[]]
но "дренаж" имеет длину 5, поэтому он будет продолжаться:
a=[[],[],[],[],["arid", "dash"],["brain"],[]]
и "thread" имеет длину 6, поэтому он будет продолжаться:
a=[[],[],[],[],["arid", "dash"],["brain"],["thread"]]
Я попытался выполнить следующий код:
A = [[]]*7 #7 is len(thread)+1. it not hard coded in my implementation
for word in words:
size=len(word)
A[size].append(word)
print(A)
когда я запускаю это, я получаю:
>>[['arid', 'dash', 'drain', 'thread'], ['arid', 'dash', 'drain', 'thread'], ['arid', 'dash', 'drain', 'thread'], ['arid', 'dash', 'drain', 'thread'], ['arid', 'dash', 'drain', 'thread'], ['arid', 'dash', 'drain', 'thread'], ['arid', 'dash', 'drain', 'thread']]
что не имеет смысла. каждый раз, когда я добавляю, слово добавляется к каждому списку в списке списков. Что я делаю неправильно? может кто-то помочь?
Вам нужно перейти на A = [[]for _ in range(7)]
. Вы можете попробовать следующее:
A = [[]for _ in range(7)] #7 is len(thread)+1. it not hard coded in my implementation
for word in words:
size=len(word)
A[size].append(word)
print(A)
Выход:
[[], [], [], [], ['arid', 'dash'], ['drain'], ['thread']]
[[]]*7
создает 7 указателей на один и тот же объект списка, отсюда и поведение, которое вы видите. Например, решения @student создают 7 независимых списков, что вам и нужно.