# Removing some element of a list according to the zero of another

I have the following code.

candidats = 4  # nombre de candidats
Pref = Arrangements(["a", "b", "c", "d"], candidats).list()
show(Pref)
show(LatexExpr("Nombre~de~préférences~possibles~="+latex(len(Pref))))
elec = 100
candidats = 4
nn = list([i for i in range(len(Pref))])
ZZ = IntegerRing()
PP = ([0 for i in nn])
PP[0] = ZZ.random_element(0, elec)
for k in nn:
PP[k] = ZZ.random_element(0, elec - sum(PP[j] for j in nn[:k]))
PP[len(Pref) - 1] = (PP[len(Pref) - 1] if (elec - sum(PP)) == 0
else  PP[len(Pref) - 1] + (elec - sum(PP)))
import random
PP1 = random.sample(PP, len(PP))
show(sum(PP))
show(PP)
show(PP1)
show(Pref)
def rz(l1, l2):
for k in range(len(l1)):
if l1[k] == 0:
del(l2[k])
show([len(PP), len(Pref)])
show(rz(PP, Pref))


The problem here begins with def rz... I would like to delete the elements of the lists Pref and PP at indices where the list PP has zeros. But it doesn't work. I do not find my error. I was also wondering if it could be done by embedding "two list comprehensions".

edit retag close merge delete

How is Pref defined ?

( 2020-06-01 15:51:48 +0200 )edit

I have repeared my oversight.

( 2020-06-01 23:22:31 +0200 )edit

Sort by » oldest newest most voted

Like this

def remove_zero(l1, l2):
return [z1 for z1, z2 in zip(l1, l2) if z2]

more

Sorry but I do not understand you suggestion. I understand the meaning of zip but not the idea --- where is the condition. + SM said that zip is not scriptable.

( 2020-06-02 12:43:25 +0200 )edit

C'est littéralement la liste des z1 dans l1 tels que l'élément z2 correspondant dans l2 soit non nul. La condition est à la fin ; j'aurais pu écrire "if z2 != 0" mais j'ai utilisé une forme équivalente abrégée.

( 2020-06-02 13:24:30 +0200 )edit

Merci FrédéricC. Mais sans z2 != 0 tous les zéros ne sont pas éliminés.

( 2020-06-02 15:31:50 +0200 )edit