Найти - Пользователи
Полная версия: странный вопрос про велосипед
Начало » Python для новичков » странный вопрос про велосипед
1 2
mswvith
привет))
я новичок в питоне и вот возник вопрос:

a1 =
b1 =

пишу скрипт, который проверяет a1 == b1 и т.д. по циклу
если не равно то заменяет значение a1 на b1 в списке

вообще цель посчитать сколько нужно итераций, что бы привести список a1 к нулям
используя списки b1, c1, d1 … ()

но пока сложности в сравнении двух списков. я так понял что можно через множества сравнить, но как заменять значения в первом списке?

mswvith
 a1 = ([random.randint(0,1) for i in range(16)])
 b1 = [b([random.randint(0,1) for i in range(16)])[/b]
JOHN_16
я практически ничего не понял. Перефразируйте задачу. Может понятней станет. Начальные условия более внятно опишите.
scidam
Для вашей задачи лучше использовать 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
mswvith
вообще задача для питон стажера

есть список а1 шестнадцать цифр, рандомные нули и единицы
 ([random.randint(0,1) for i in range(16)])

остальные списки b1, c1, d1, e1, f1, g1 и т.д. генереруются по такому же принципу
([random.randint(0,1) for i in range(16)])

сколько нужно шагов, что бы привести а1 к списку где все единицы
[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('заменить этот элемент единицей')
		
mswvith
как накладывать эти списки друг на друга, что бы получить
 а1 = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,]
?
и как можно посчитать сколько нужно таких итераций?
mswvith
вот теперь в каждом столбце будет единица, а не ноль, потребовалось 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]
как накладывать эти списки, друг на друга, что бы в каждом столбце получить единицу?
mswvith
если в колонке есть хоть одна единица, то колонка считается за единицу. могут быть только два значения: единица или ноль.

нужно накладывать списки друг на друга, пока во всех колонках не будет хоть одной единицы
итераций может быть много(так как числа рандомные), но значений всего два, поэтому их будет разумное количество.
задача посчитать количество итераций, а подзадача правильно складывать(накладывать эти списки друг на друга).

сорри за не внятность)
mswvith
что то вроде этого, осталась причесать

 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
scidam
Если это для стажера, то значит никакого 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)

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB