У меня есть список, содержащий несколько целых чисел, и добавляю их во второй список по индексу, соответствующему их значению. Во втором списке уже есть корзина, заполненная заполнителями («X»). то есть:
firstlist = [2, 3, 5]
с выходом:
secondlist = ['X', 'X', 2, 3, 'X', 5, 'X', 'X']
Как лучше всего это сделать? Любая помощь очень ценится!
что вы пробовали и в чем конкретная проблема?
@GeeTransit второй список перед изменением на текущий вывод представляет собой просто список, заполненный 10 крестиками в качестве заполнителей.
@ user7755 означает ли это, что правильное решение здесь перезапишет три X и удалит один? Я смущен.






Это примет аргумент списка и поместит их в новый список, который будет возвращен функцией.
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. Фактически, он вообще не использует второй список пожимать плечами
Я отредактировал его, чтобы он мог иметь аргумент длины. Если желательно, чтобы выходной список имел длину 5, вы можете использовать list_fill((1, 3, 4), 'X', 5). secondlist, который был у OP, только что залит 'X'. Вы можете указать это в аргументе fill.
Конечно, я не возражаю, что это может быть лучший метод, но, похоже, он не выполняет то, что хочет сделать OP. Возможно, это просто вопрос неясной спецификации (это никогда не был проблемой при программировании: D)
Я думаю, что secondlist OP не служит реальной цели, а просто список вывода, созданный заранее. В любом случае, функции можно использовать где угодно, поэтому, если OP использует это везде в своем коде, это может минимизировать длину кода: D
На самом деле никогда не думал о заполнении списка выражением if-else, но на самом деле это действительно кажется отличным способом добавления заполнителей!
Вы ищете что-то настолько простое, как это:
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.
На самом деле да! Никогда не думал, что все так просто. Спасибо!
Вы можете использовать .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. Если нет, то вставляется номер в петле.
Что содержится во втором списке перед выводом? В вашем примере перед изменением второй список содержит 8 X или только 5 X?