#python #list
Вопрос:
Это вопрос, с которым я встретился вчера в интервью, поэтому я не могу предоставить ссылку на исходный вопрос здесь
Вот описание:
Мне дается массив целых чисел, подобных этому [0,2,3], [1,0,0], где нули обозначают недостающие части, которые мне нужно заполнить при соблюдении следующих условий:
- Мне также присваивается число k, что означает, что каждое число, которое $a_{i}$ выбирает для заполнения, находится в диапазоне от 1 до k
- После заполнения номера список должен быть в следующем порядке: a1<=a2..<=целое(но я не должен изменить порядок индекса, что означает, что я не могу заполнить кучу чисел и отсортировать список)
Вот что я сделал вчера:
list1 = []
#%%
k = 3
a = [0,2,3]
for i in range(len(a)):
if a[i] == 0:
for j in range(1,k 1):
a[i] = j
print('a,',a)
print('list1:',list1)
if a[0] > a[1]:
continue
else:
print(a)
rv = 0
for m in range(1,(len(a)-1)):
if a[m] <= a[m 1]:
rv =1
if rv == len(a) - 2:
print('value',a)
print('before;',list1)
list1.append(a.copy())
print('after',list1)
Это может решить список только с одним нулевым номером, поэтому кто-нибудь может помочь мне решить проблему?
Дополнительное объяснение:
Ответ №1:
Если вам нужно короткое решение, и ваши единственные условия-это номера заполнения от 1 k
до, и каждый номер заполнения должен быть равен или больше последнего номера заполнения, это сработает:
k = 5
a = [0 , 2, 3, 0]
answer = list(map(lambda i: 1 if i==0 else i, a))
Это, очевидно, играет на том факте, что все числа заполнения могут быть равными. Если вам нужно более полное и подробное решение с увеличением числа заполнений, вам следует отслеживать текущее/последнее число заполнений за пределами вашего цикла, например:
k = 5
last_fill = 1
a = [0, 1, 2, 0]
for i in range(len(a)):
if a[i] == 0:
if last_fill > k:
print("Value out of k range!")
break
a[i] = last_fill
last_fill = 1
Перечитывая ваш вопрос, я немного не уверен, хотите ли вы, чтобы весь список был отсортирован в конце или нет. Это, как говорится, вы можете использовать sort
, чтобы позаботиться о любой сортировке, как описано выше answer = list(map(lambda i: 1 if i==0 else i, a)).sort()
.
Комментарии:
1. Привет, спасибо за ваш ответ. Я думаю, мне нужно подробнее объяснить вопрос, речь идет не о сортировке, вопрос говорит мне, что я не могу изменить порядок индексов исходного списка
2. @SongCalderoneZhang ах. Таким образом, позиция в списке должна быть сохранена для всех ненулевых элементов. В этом случае решение с использованием лямбда-функции работает.