Diskuze: redukce "duplicitních" hodnot v listu
Tvůrce
Zobrazeno 14 zpráv z 14.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
Možná kdybys také napsal, co se vlastně má udělat?
Chceš z listu vyházet duplicity?
Chceš rychlou kontrolu, jestli seznam už obsahuje jeden nějaký prvek?
Jaká hodnota se bere jako klíčová, pokud máš duplicitu?
chci ty duplicity vyházet. součet všech čísel v listu je vždycky stejný, ale došlo mi, že při násobení nezáleží na pořadí, takže zkoušim mezi sebou ty hodnoty pronásobit a funguje to, jen to není zrovna pěkné.
vystup2 = []
for a in vystup:
obsahuje = False
nasobek = int(a[0]) * int(a[1]) * int(a[2]) * int(a[3]) * int(a[4]) * int(a[5]) * int(a[6]) * int(a[7]) * int(a[8]) * int(a[9])
for b in vystup2:
nasobek2 = int(b[0]) * int(b[1]) * int(b[2]) * int(b[3]) * int(b[4]) * int(b[5]) * int(b[6]) * int(b[7]) * int(b[8]) * int(b[9])
if(nasobek == nasobek2):
obsahuje = True
break
if (obsahuje == False):
vystup2.append(a)
S tím že vystup je list se všemi hodnotami
Kromě toho, že nuly a jedničky budou trochu problém...
src = ['1123', '1213', '2113', '1222']
tgt = list({tuple(sorted(x)):x for x in src}.values())
print(src)
print(tgt)
Když už jsme u toho Pythonu, tak tohle vynásobí číslice ve stringu
reduce(int.__mul__, map(int, '234'))
A místo proměnné "obsahuje" stačí použít else větev for-cyklu
for a in vystup:
if a in vystup2:
break
else:
vystup2.append(a)
nuly nebudou problém, taky se jedná o výpočet možných hodů kostek, na
kterých jsou čísla 1-6 
Ale ten tvuj je lepší, nechal v listu o jednu hodnotu víc než já, takže
tam mam někde chybu (tipuju to na to, že 22 a 14 bere program jako stejnou
hodnotu (4)
)
# reduce(int.__mul__, map(int, '234'))
it = map(int, '234')
result = reduce(int.__mul__, it)
map aplikuje funkci int() postupně na každou hodnotu z iterátoru
reduce aplikuje funkci int.__mul__ postupně na dvojice hodnot
def map(func, iterable):
for i in iter(iterable):
yield func(i)
def reduce(func, iterable):
it = iter(iterable)
j = next(it)
for i in it:
j = func(j, i)
return j
print(list(map(int, '234')))
print(reduce(int.__mul__, [2,3,4]))
já měl namysli spíše tu první verzi:
tgt = list({tuple(sorted(x)):x for x in src}.values())
A co tohle:
mnozina = set()
for hodnota in vystup:
mnozina.update(["".join(sorted(hodnota)), ""])
mnozina.remove("")
Aha, schopnost jasně se vyjadřovat nepatří mezi tvoje silné stránky,
že? 
tgt = list({tuple(sorted(x)):x for x in src}.values())
# převede string na seřazené pole znaků a vytvoří z něj tuple, protože ten jde vložit do dictionary jako klíč
def ts(x):
return tuple(sorted(x))
# vytvoří dictionary: pro každou hodnotu z src bude klíč identický pro všechny duplicitní hodnoty, hodnota bude původní string
unique = {ts(x):x for x in src}
# hodnoty z dictionary, klíče už můžeme ignorovat
vals = unique.values()
# vytvoření listu
tgt = list(vals)
Množina by byla IMHO lepší, pokud by naše řešení byla identická, jenže to nejsou. Tvůj kód totiž nevyhazuje duplicity z původních hodnot a tedy nesplňuje zadání. To byl také důvod, proč jsem se na začátku ptal na více detailů, a proč jsem množiny nepoužil.
Co se týče těch kostek, nejde ti o toto, třeba pro dvě kostky?:
from itertools import product
vysledky = [(x,y) for x,y in product(range(1,7), range(1,7)) ]
\---
Zobrazeno 14 zpráv z 14.
