Wpis z mikrobloga

pytanie z kategorii głupich ale nie mogę zrozumieć, dopiero zaczynam z pythonem nie bijcie
mam 2 listy,
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
chce w jednej linijce utworzyć listę c będącą częścią wspólną tych list(bez powtórzeń)
c = [element for element in a if element not in c and element in b]
dostaję:
[1, 1, 2, 3, 5, 8, 13]
Pytanie: dlaczego 1 przeszło dwukrotnie? co za czary
#python #naukaprogramowania
pytanko stąd, #10 https://www.practicepython.org
  • 21
  • Odpowiedz
jeżeli deklarujesz c najpierw jako pustą listę to kolejność jest taka, że najpierw wykonuje się to co jest pomiędzy [ i ] a dopiero potem to będzie przypisane do c
  • Odpowiedz
@mcnight95: ok to "element not in c" nic nie zmienia w ogóle, muszę to po prostu chyba jeszcze przemyśleć albo ogarnąć te sety, dziękuje za pomoc, plusik dla każdego
  • Odpowiedz
@Brzozaa: Robisz to w następującu sposób:
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
c = []
for item in a:
if item in b:
break
elif item in c:
break
else:
c.append(item)
for item in b:
if item in c:
break
else:
c.append(item)
print(c)

Tak wiem da się szybciej, ale
  • Odpowiedz
@Brzozaa: @tomos: @lilith_100: to zadanie jest tak słabo sformułowane, że nawet w odpowiedzi przyznają się do błędu. Nie da się tego zrobić jako list comprehension nie używając setu (nieznanego na tym etapie ćwiczeń). Albo dajesz set z pierwszej listy, albo rozpisujesz na kilka linii.
  • Odpowiedz
@Brzozaa: Pomyliłam w poprzednim, chciałeś część wspólną a nie sumę, poprawny kod wygląda następująco:

a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
c = []
for item in a:
if item in b and item not in c:
c.append(item)

print(c)
  • Odpowiedz