Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 8, 2018 12:24:39

mswvith
Зарегистрирован: 2018-01-24
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

странный вопрос про велосипед

привет))
я новичок в питоне и вот возник вопрос:

a1 =
b1 =

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

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

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

Офлайн

#2 Апрель 8, 2018 12:25:34

mswvith
Зарегистрирован: 2018-01-24
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

странный вопрос про велосипед

 a1 = ([random.randint(0,1) for i in range(16)])
 b1 = [b([random.randint(0,1) for i in range(16)])[/b]

Офлайн

#3 Апрель 8, 2018 12:48:16

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

странный вопрос про велосипед

я практически ничего не понял. Перефразируйте задачу. Может понятней станет. Начальные условия более внятно опишите.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Апрель 8, 2018 12:53:26

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

странный вопрос про велосипед

Для вашей задачи лучше использовать 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

Офлайн

#5 Апрель 8, 2018 13:18:44

mswvith
Зарегистрирован: 2018-01-24
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

странный вопрос про велосипед

вообще задача для питон стажера

есть список а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('заменить этот элемент единицей')
		

Офлайн

#6 Апрель 8, 2018 13:23:35

mswvith
Зарегистрирован: 2018-01-24
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

странный вопрос про велосипед

как накладывать эти списки друг на друга, что бы получить

 а1 = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,]
?
и как можно посчитать сколько нужно таких итераций?

Офлайн

#7 Апрель 8, 2018 13:36:40

mswvith
Зарегистрирован: 2018-01-24
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

странный вопрос про велосипед

вот теперь в каждом столбце будет единица, а не ноль, потребовалось 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]
как накладывать эти списки, друг на друга, что бы в каждом столбце получить единицу?

Офлайн

#8 Апрель 8, 2018 13:45:09

mswvith
Зарегистрирован: 2018-01-24
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

странный вопрос про велосипед

если в колонке есть хоть одна единица, то колонка считается за единицу. могут быть только два значения: единица или ноль.

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

сорри за не внятность)

Офлайн

#9 Апрель 8, 2018 14:34:24

mswvith
Зарегистрирован: 2018-01-24
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

странный вопрос про велосипед

что то вроде этого, осталась причесать

 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

Офлайн

#10 Апрель 9, 2018 04:14:34

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

странный вопрос про велосипед

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

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version