Форум сайта python.su
привет))
я новичок в питоне и вот возник вопрос:
a1 =
b1 =
пишу скрипт, который проверяет a1 == b1 и т.д. по циклу
если не равно то заменяет значение a1 на b1 в списке
вообще цель посчитать сколько нужно итераций, что бы привести список a1 к нулям
используя списки b1, c1, d1 … ()
но пока сложности в сравнении двух списков. я так понял что можно через множества сравнить, но как заменять значения в первом списке?
Офлайн
a1 = ([random.randint(0,1) for i in range(16)])
b1 = [b([random.randint(0,1) for i in range(16)])[/b]
Офлайн
я практически ничего не понял. Перефразируйте задачу. Может понятней станет. Начальные условия более внятно опишите.
Офлайн
Для вашей задачи лучше использовать numpy, он гораздо быстрее работает со списками, в том числе позволяет сразу генерировать массив из случайных чисел.
import numpy as np a1 = np.random.randint(0, 2, 16) b1 = np.random.randint(0, 2, 16) # ....если не равно то заменяет значение a1 на b1 в списке a1[a1!=b1] = b1[a1!=b1] # т.е. Если a1[i] не равно b1[i], то присваиваем a1[i] = b1[i]
mswvith
вообще цель посчитать сколько нужно итераций, что бы привести список a1 к нулям
используя списки b1, c1, d1 … ()
a1 = [0.0] * 16
Офлайн
вообще задача для питон стажера
есть список а1 шестнадцать цифр, рандомные нули и единицы
([random.randint(0,1) for i in range(16)])
([random.randint(0,1) for i in range(16)])
[code python]а = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,][/code]
а1[i] + b1[i] == 1
а1[i] + с1[i] == 1
for x in a1: for y in b1: if x + y <= 1: print('заменить этот элемент единицей')
Офлайн
как накладывать эти списки друг на друга, что бы получить
а1 = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,]
Офлайн
вот теперь в каждом столбце будет единица, а не ноль, потребовалось 12 итераций.
[1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1] [0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0] [0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1] [0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1] [1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0] [0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0] [1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1] [0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1] [0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1] [1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1] [1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1] [1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1] [1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1]
Офлайн
если в колонке есть хоть одна единица, то колонка считается за единицу. могут быть только два значения: единица или ноль.
нужно накладывать списки друг на друга, пока во всех колонках не будет хоть одной единицы
итераций может быть много(так как числа рандомные), но значений всего два, поэтому их будет разумное количество.
задача посчитать количество итераций, а подзадача правильно складывать(накладывать эти списки друг на друга).
сорри за не внятность)
Офлайн
что то вроде этого, осталась причесать
def one(): a1 = [random.randint(0,1) for i in range(16)] b1 = [random.randint(0,1) for i in range(16)] for i in a1: if i == 0: for j in b1: if j == 1: return i+j
Офлайн
Если это для стажера, то значит никакого numpy и прочих вещей.. Все, однако, можно сделать гораздо проще…
Поскольку ваш набор из нулей и единиц это двоичное представление числа от 0 до 2 ** 16, а накладка двух
ваших строк – это побитовое-или (I – bitwise or); то решение вашей задачи будет таким:
фактически мы начинаем со строки [0,0,0…..0, а потом, каждый раз накладываем случайную строку из нулей и единиц,
до тех пор, пока не будут все единицы в строке.
val, count = 0, 0 while val != (2**16 - 1): val |= random.randint(0, 2**16) print("Current row is {:016b}".format(val)) count += 1 print("The number of required iterations is: ", count)
Отредактировано scidam (Апрель 9, 2018 04:14:52)
Офлайн