Это мой код для поиска простых чисел, используя Сито Эратосфена.
list = [i for i in range(2, int(raw_input("Compute primes up to what number? "))+1)]
for i in list:
for a in list:
if a!=i and a%i == 0:
list.remove(a)
Попытка найти способ сжать те вложенные для циклов в какой-то генератор или понимание, но не кажется, что вы можете применить функцию к списку, используя понимание. Я пробовал использовать карту и фильтр, но я не могу понять, что это правильно.
Думая о чем-то подобном:
print map(list.remove(a), filter(lambda a, i: (a%i ==0 and a!=i), [(a, i) for i in list for a in list])
Очевидно, что это не работает по десяткам причин. Если я просто использовал часть фильтра этого кода:
filter(lambda a, i: (a%i ==0 and a!=i), **[(a, i) for i in list for a in list]**
Каков правильный способ размещения двух переменных в лямбда? (a, i) делает его кортежем, но я хочу представить 'a' и 'i' в качестве независимых переменных для ввода в лямбда.
В результате я решил решить эту проблему одним слоем:
print sorted(set([i for i in range(2, int(raw_input("Compute primes up to what number? "))+1)]).difference(a for i in l for a in l if a!=i and a%i == 0))