Python: добавление элемента в список по индексу с тем же значением

У меня есть список, содержащий несколько целых чисел, и добавляю их во второй список по индексу, соответствующему их значению. Во втором списке уже есть корзина, заполненная заполнителями («X»). то есть:

firstlist = [2, 3, 5]

с выходом:

secondlist = ['X', 'X', 2, 3, 'X', 5, 'X', 'X']

Как лучше всего это сделать? Любая помощь очень ценится!

Что содержится во втором списке перед выводом? В вашем примере перед изменением второй список содержит 8 X или только 5 X?

SPYBUG96 03.01.2019 19:41

что вы пробовали и в чем конкретная проблема?

buran 03.01.2019 19:41

@GeeTransit второй список перед изменением на текущий вывод представляет собой просто список, заполненный 10 крестиками в качестве заполнителей.

user7755 03.01.2019 19:42

@ user7755 означает ли это, что правильное решение здесь перезапишет три X и удалит один? Я смущен.

Adam Smith 03.01.2019 20:01
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
930
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Это примет аргумент списка и поместит их в новый список, который будет возвращен функцией.

def list_fill(first_list, fill, length=None):
    return [(i if i in first_list else fill) for i in (range(max(first_list) + 1) if length is None else range(length))]

Как работает list_fill:

Аргумент first_list включает индексы, которые необходимо изменить. Аргумент fill - это то, какими должны быть пустые места. Третий необязательный аргумент length определяет длину вывода. Если оставить поле пустым, будет использоваться максимальный индекс, указанный в first_list.

Это создает новый список, который, похоже, не соответствует тому, что ищет OP. Фактически, он вообще не использует второй список пожимать плечами

Adam Smith 03.01.2019 20:08

Я отредактировал его, чтобы он мог иметь аргумент длины. Если желательно, чтобы выходной список имел длину 5, вы можете использовать list_fill((1, 3, 4), 'X', 5). secondlist, который был у OP, только что залит 'X'. Вы можете указать это в аргументе fill.

GeeTransit 03.01.2019 20:10

Конечно, я не возражаю, что это может быть лучший метод, но, похоже, он не выполняет то, что хочет сделать OP. Возможно, это просто вопрос неясной спецификации (это никогда не был проблемой при программировании: D)

Adam Smith 03.01.2019 20:14

Я думаю, что secondlist OP не служит реальной цели, а просто список вывода, созданный заранее. В любом случае, функции можно использовать где угодно, поэтому, если OP использует это везде в своем коде, это может минимизировать длину кода: D

GeeTransit 03.01.2019 20:16

На самом деле никогда не думал о заполнении списка выражением if-else, но на самом деле это действительно кажется отличным способом добавления заполнителей!

user7755 04.01.2019 15:34

Вы ищете что-то настолько простое, как это:

firstlist = [2, 3, 5]
secondlist = ['X']*10

for index in firstlist:
    secondlist[index] = index

print(secondlist)
# ['X', 'X', 2, 3, 'X', 5, 'X', 'X', 'X', 'X']

Может быть dict для firstlist с индексами для key и значением, которое вы хотите поместить как values для dict.

На самом деле да! Никогда не думал, что все так просто. Спасибо!

user7755 03.01.2019 20:02

Вы можете использовать .insert (), если хотите сохранить то, что уже находится во втором списке.

firstlist = [2, 3, 5]
secondlist = ['X', 'X', 'X', 'X', 'X']

for x in range(len(firstlist)):
    secondlist.insert(firstlist[x], firstlist[x])

print(secondlist)

Допустим, вам нужно создать функцию YourFunc(inputlist,length), где аргумент inputlist - это список для ввода, а length - аргумент для длины списка для вывода. Итак, согласно вашему вопросу, inputlist=[2,3,5] и length=8.

def YourFunc(inputlist,length):
        out=[]
        for X in range (0,length):
                if inputlist.count(X)==1:
                         out.append(X)
                elif inputlist.count(X)==0:
                         out.append('X')
        print(out)

YourFunc([2,3,5],8)

Так я обычно и поступаю. В этой функции выполняется цикл от 0 к length. Если элемент is отсутствует в inputlist, то 'X' вставляется в список вывода out. Если нет, то вставляется номер в петле.

Другие вопросы по теме