Gdzie jest błąd

0
tablica1=[]
tablica2=[1,2,3]

i=0

while i<len(tablica2):
    podaj=int(input())
    tablica1.append(podaj)
    i+=1


tab=[m for m ,n in zip(tablica1,tablica2) if n!=m]
print(tab)

Mam taki prosty kod sprawdzający duplikaty i wypisujący wartości różne niż duplikaty , moje pytanie jest trywialne ale nie daje mi spokoju , dlaczego na 1-5 wartości działa dobrze , a od 6 wartości wzwyż wypisuje nieprawidłowe wartości ? czy to jest zależne od interpretera ?

0

Ale co dokładnie ten kod miał robić? Bo on teraz porównuje ci elementy na odpowiadajacych sobie indeksach i to tylko tyle elementów ile ma krótsza tablica.

0
Shalom napisał(a):

Ale co dokładnie ten kod miał robić? Bo on teraz porównuje ci elementy na odpowiadajacych sobie indeksach i to tylko tyle elementów ile ma krótsza tablica.

Po porównaniu elementów ma wypisać elementy różne niż duplikaty , ale tutaj nie ma krótszej tablicy

1

Kolego...

>>> [m for m ,n in zip( [1,2,3,4,5,10,11,18,19,20], [1,2,3,4,5,6,7,8,9,10]) if n!=m]
[10, 11, 18, 19, 20]
0

tablica1=[15,15,18,98,1,2,3,4,5,9]
tablica2=[1,2,3,4,5,6,7,8,9,10]

[15, 15, 18, 98, 1, 2, 3, 4, 5, 9]

o te wartości oznaczone Boldem mi chodzi,czy powinno je wyświetlać biorąc pod uwagę fakt że ma wyświetlać wartości rożne od duplikatów

0

zip(tablica1,tablica2) = (15, 1), (15, 2), (18, 3), (98, 4), (1, 5), (2, 6), (3, 7), (4, 8), (5, 9), (9, 10)

Jak widać każda para jest różna, więc wypisuje wszystkie liczby. Jeśli chcesz się pozbyć duplikatów to przynajmniej to posortuj, a jeśli wprowadzone wartości mogą się powtarzać to użyj najlepiej setów.

1
tablica1=[15,15,18,98,1,2,3,4,5,9]
tablica2=[1,2,3,4,5,6,7,8,9,10] 
tab=[m for m ,n in zip(tablica1,tablica2) if n!=m]
print(tab)

W tym kodzie odrzucasz element tylko i wyłącznie jeżeli element ma ten sam indeks i wartość.

to jest taj jakbyś robił

temp = []
for n, m in zip(tablica1, tablica2):
    if n != m:
        temp.append(m)
0

Nawet sobie z ciekawości szybko wpisałem to w konsolę i wydaje się działać.
set(tablica1).difference(tablica2)

Edit: zapomniałem, żeby z drugiego obiektu też zrobić set, ale najwyraźniej Python to sobie jakoś automagicznie ogarnia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1