Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.
python kolla om listor har identiska listor i sig
Senast redigerat
skriver med korvfingrar
Visa signatur
Tjenare jag har ett problem jag har två listor med listor i båda så som
l1=[[0,4],[0,5]]
l2=[[0,4],[0,7]]
hur gör jag för att kolla om en av listorna innehåller samma lista?
testade
if(list(set(l1) & set(l2)))!=[]:
print("gg")
vilket gav
TypeError: unhashable type: 'list'
tacksam för svar
if l1== l2 and l1 and l2:
print("GG!")
else:
print("försök igen...")
Den kollar l1 är lika med l2 och om det finns något i l1 och l2.
Är någon av dom None eller tom så blir det false.
@madmaster32:
Problemet du upplever är att du inte kan ha ett set av listor. Detta eftersom ett element i ett set ska vara hashbart, eftersom en lista är ändringsbar (mutable) så går det inte att med säkerhet hasha.
otestade lösningar och med reservation för att jag inte kan python bättre (finns antagligen snyggare python-lösning):
for l in l1:
if l in l2:
print "GG"
break
Och om jag ska försöka efterlikna din egen metod:
if set([tuple(l) for l in l1]) & set([tuple(l) for l in l2]):
print "GG"
@madmaster32:
Problemet du upplever är att du inte kan ha ett set av listor. Detta eftersom ett element i ett set ska vara hashbart, eftersom en lista är ändringsbar (mutable) så går det inte att med säkerhet hasha.
Exactamundo! Det lyfter också frågan om huruvida valet att använda en lista för de inre elementen är vettigt. Troligen borde det varit en tuple, då det verkar vara någon form av koordinat (kanske än hellre en namedtuple
, om man vill finlira) där varje element har en specifik betydelse. Hade de varit tuplar så hade set(l1) & set(l2)
fungerat direkt.
Det är också oklart om en lista är rätt datastruktur att samla dessa tuplar i till att börja med. Är ordningen relevant? Kan samma element förekomma multipla gånger, och har det i så fall någon mening? Om inte: använd ett set
från första början, så löser mycket av problemet sig självt.
Sammanfattat så kanske ett set
av tuplar vore mer passande än en lista av listor här.
När jag ändå är på tråden:
if set([tuple(l) for l in l1]) & set([tuple(l) for l in l2]):
print "GG"
Man kan spara några hakparenteser och skriva:
if set(tuple(l) for l in l1) & set(tuple(l) for l in l2):
print("GG") # ← Nu är vi Python 3-kompatibla! :-)
Argumenten blir nu (förutom aningens mer lättlästa) snarare generator expressions med "lat uppbyggnad", vilket ibland är oumbärligt mycket bättre, och åtminstone inte sämre.
Ser man en liknande konvertering i kod så är det dock en stor blinkande neonskylt som varnar om att något i designen troligen inte är så smidigt som det skulle kunna vara. Av de fragment vi ser här så misstänker jag starkt åtminstone att de inre listorna borde vara tuplar.
Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.
Exactamundo! Det lyfter också frågan om huruvida valet att använda en lista för de inre elementen är vettigt. Troligen borde det varit en tuple, då det verkar vara någon form av koordinat (kanske än hellre en namedtuple
, om man vill finlira) där varje element har en specifik betydelse. Hade de varit tuplar så hade set(l1) & set(l2)
fungerat direkt.
Det är också oklart om en lista är rätt datastruktur att samla dessa tuplar i till att börja med. Är ordningen relevant? Kan samma element förekomma multipla gånger, och har det i så fall någon mening? Om inte: använd ett set
från första början, så löser mycket av problemet sig självt.
Sammanfattat så kanske ett set
av tuplar vore mer passande än en lista av listor här.
När jag ändå är på tråden:
Man kan spara några hakparenteser och skriva:
if set(tuple(l) for l in l1) & set(tuple(l) for l in l2):
print("GG") # ← Nu är vi Python 3-kompatibla! :-)
Argumenten blir nu (förutom aningens mer lättlästa) snarare generator expressions med "lat uppbyggnad", vilket ibland är oumbärligt mycket bättre, och åtminstone inte sämre.
Ser man en liknande konvertering i kod så är det dock en stor blinkande neonskylt som varnar om att något i designen troligen inte är så smidigt som det skulle kunna vara. Av de fragment vi ser här så misstänker jag starkt åtminstone att de inre listorna borde vara tuplar.
Tackar. Håller själv på att lära mig python. Så all info är välkommet
Skickades från m.sweclockers.com
Copyright © 1999–2024 Geeks AB. Allt innehåll tillhör Geeks AB.
Citering är tillåten om källan anges.