Если данные считываются 3 раза подряд, то следующие данные изменяют значение на 20 данных

#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)