Заполнение пустого списка списков на основе длины строки

1

Скажем, у меня есть следующий список слов

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']]

что не имеет смысла. каждый раз, когда я добавляю, слово добавляется к каждому списку в списке списков. Что я делаю неправильно? может кто-то помочь?

  • 2
    Фактически [[]]*7 создает 7 указателей на один и тот же объект списка, отсюда и поведение, которое вы видите. Например, решения @student создают 7 независимых списков, что вам и нужно.
Теги:
string
list

1 ответ

1
Лучший ответ

Вам нужно перейти на 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']]
  • 1
    Большое спасибо. Это сработало. В случае сомнений, это, вероятно, указатели.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню