#python #python-3.x #list
Вопрос:
Я хочу внести изменения, если данные случайного списка будут выдавать значение 0 три раза подряд, а затем оно изменит значение случайного списка на 1 для следующих 20 данных, и вот пример произвольной программы, которую я создал.
import random
randomlist = []
for i in range(0,100):
n = random.randint(1,20)
if n > 10 :
randomlist.append('0')
else :
randomlist.append('1')
print(randomlist)
Мне жаль, что я внес изменения в данные, чтобы облегчить понимание моего вопроса.
dataList = [4, 9, 10, 12, 5, 6, 15, 16, 8, 18, 20, 21, 1, 3, 5, 6, 8, 15, 13, 22, 25, 1, 3, 11, 5, 18, 24, 25, 23, 19, 14, 6, 9, 3, 20, 3, 1, 20]
result=[]
for i in dataList:
if i > 10 :
result.append('0')
else :
result.append('1')
Вот результаты
['1', '1', '1', '0', '1', '1', '0', '0', '1', '0', '0', '0', '1', '1', '1', '1', '1', '0', '0', '0', '0', '1', '1', '0', '1', '0', '0', '0', '0', '0', '0', '1', '1', '1', '0', '1', '1', '0']
Желаемый результат
['1', '1', '1', '0', '1', '1', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '0', '1', '1', '0']
Комментарии:
1. В чем заключается запрос? В заголовке написано «прочитать 3 раза», но код пишется (генерирует значения).
2. здесь означает прочитать результаты случайного списка
3. Почему
randint(1,20)
? Если вас интересует только0
и » 1`, просто сделайтеrandint(0,1)
это . И, похоже, ваш желаемый результат заключается в том, что после трех нулей вы хотите заставить еще 20 нулей, а не 20, как говорится в тексте вопроса
Ответ №1:
Вот еще один пример, который может помочь. результат преобразуется на основе первого правила (> 10 или нет) Затем мы проходим через список, как только у нас будет три 0 («000»), мы меняем следующие 20 пунктов на «0». Если ближе к концу списка данных вы найдете другую последовательность 0, то мы изменим значения на конец списка (сохраним исходный размер списка данных).
dataList = [4, 9, 10, 12, 5, 6, 15, 16, 8, 18, 20, 21, 1, 3, 5, 6, 8, 15, 13, 22, 25, 1, 3, 11, 5, 18, 24, 25, 23, 19, 14, 6, 9, 3, 20, 3, 1, 20]
result=['0' if x > 10 else '1' for x in dataList ]
print(result)
size, i = len(dataList), 2
while i<size:
if result[i] result[i-1] result[i-2] == "000":
NumberOf0= min(20, size - i-1)
for j in range(1 NumberOf0):
result[i j] = '0'
i =j 2
i =1
print (result)
Ответ №2:
Если я вас правильно понял, вы хотите добавить 20 нулей в свой список, если предыдущие 3 элемента были равны нулю. Здесь я проверяю последние три элемента и добавляю ноль 20 раз, а затем прохожу следующие 20 итераций.
dataList = [4, 9, 10, 12, 5, 6, 15, 16, 8, 18, 20, 21, 1, 3, 5, 6, 8, 15, 13, 22, 25, 1, 3, 11, 5, 18, 24, 25, 23, 19, 14, 6, 9, 3, 20, 3, 1, 20]
result=[]
one_before = now = None
i = 0
for item in dataList:
try:
if dataList[i] > 10 :
result.append('0')
else :
result.append('1')
except:
break
two_before = one_before # the two element before the last element
one_before = now # one element before the last element
now = result[-1] # value of the last element
zero_list = ['0']*20 # List containing 20 zeros to append result
if now=='0' and one_before=='0' and two_before=='0': #Check if last three elements are zero
result.extend(zero_list) # Add 20 zeros
i = i 21 # Pass 20 iterations
else:
i = i 1 # Pass to next iteration
print(result)