Gdzie jest błąd

Cisi204
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 232
0
Kopiuj
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 ?

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
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.

Cisi204
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 232
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

TS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 394
1

Kolego...

Kopiuj
>>> [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]
Cisi204
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 232
Cisi204
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 232
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

TS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 394
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.

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 426
1
Kopiuj
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ł

Kopiuj
temp = []
for n, m in zip(tablica1, tablica2):
    if n != m:
        temp.append(m)
TS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 394
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.