Doporučte programovací jazyk pro Windows

Ink

  • *****
  • 502
    • Zobrazit profil
    • E-mail
Re:Doporučte programovací jazyk pro Windows
« Odpověď #435 kdy: 24. 03. 2020, 19:47:11 »
Tenhle hnus je nějaká forma unique nebo distinct?

.filter((num, index, nums) => nums.indexOf(num) == index)

Ano, to je unique, a neni to Lua, ale Javascript - to je takovy ten jazyk, ktery brzo prevalcuje Python, a ktera ma dneska spousta Javistu v zaloze :D

Tvl tady Pythonisti ani neznaji monady, a pritom my to v Jave pouzivame uz od verze 1.8  8)
Tydlencty "monady" mame v Pythonu odjakziva.

Kód: [Vybrat]
from dataclasses import dataclass
from functools import reduce
from typing import List

@dataclass
class Contact:
    kozy: int
    iq: int
    phoneNumbers: List[str]


CONTACTS = [
    Contact(
        kozy = 2,
        iq = 100,
        phoneNumbers = [
            '123456789',
        ],
    ),
    Contact(
        kozy = 4,
        iq = 150,
        phoneNumbers = [
            '113456789',
            '133456789',
        ],
    ),
    Contact(
        kozy = 5,
        iq = 130,
        phoneNumbers = [
            '113456789',
            '213456789',
        ],
    ),
]

if __name__ == '__main__':
    numbers = set(
        reduce(
            (lambda x, y: x + y), [
                c.phoneNumbers
                for c in CONTACTS
                if c.kozy > 3 and c.iq > 100
            ], []
        )
    )
    print(numbers)


qelurg

  • ****
  • 340
    • Zobrazit profil
    • E-mail
Re:Doporučte programovací jazyk pro Windows
« Odpověď #436 kdy: 24. 03. 2020, 20:47:19 »
Tvl to jsou programatori tohletoto... Nejprve jim nevoni Java, a pak ani nepochopi supereasy priklad.
Je videt, ze nejsi programator. Todle je nadherna ukazka toho, jak se programovat nema, nikdy :-).
To je javascript synku, jeste se mas hodne co ucit  ;)
O tom rec neni, rec je o tom, ze takhle programuje prase, nikoliv programator.

qelurg

  • ****
  • 340
    • Zobrazit profil
    • E-mail
Re:Doporučte programovací jazyk pro Windows
« Odpověď #437 kdy: 24. 03. 2020, 20:54:14 »
Tenhle hnus je nějaká forma unique nebo distinct?

.filter((num, index, nums) => nums.indexOf(num) == index)

Ano, to je unique, a neni to Lua, ale Javascript - to je takovy ten jazyk, ktery brzo prevalcuje Python, a ktera ma dneska spousta Javistu v zaloze :D

Tvl tady Pythonisti ani neznaji monady, a pritom my to v Jave pouzivame uz od verze 1.8  8)
Tydlencty "monady" mame v Pythonu odjakziva.
Ja bych mu to neukazoval, imho to ma za domaci ukol a neumi si s tim poradit.

Re:Doporučte programovací jazyk pro Windows
« Odpověď #438 kdy: 24. 03. 2020, 22:11:47 »
Tenhle hnus je nějaká forma unique nebo distinct?

.filter((num, index, nums) => nums.indexOf(num) == index)

Ano, to je unique, a neni to Lua, ale Javascript - to je takovy ten jazyk, ktery brzo prevalcuje Python, a ktera ma dneska spousta Javistu v zaloze :D

Tvl tady Pythonisti ani neznaji monady, a pritom my to v Jave pouzivame uz od verze 1.8  8)
Tydlencty "monady" mame v Pythonu odjakziva.

Kód: [Vybrat]
from dataclasses import dataclass
from functools import reduce
from typing import List

@dataclass
class Contact:
    kozy: int
    iq: int
    phoneNumbers: List[str]


CONTACTS = [
    Contact(
        kozy = 2,
        iq = 100,
        phoneNumbers = [
            '123456789',
        ],
    ),
    Contact(
        kozy = 4,
        iq = 150,
        phoneNumbers = [
            '113456789',
            '133456789',
        ],
    ),
    Contact(
        kozy = 5,
        iq = 130,
        phoneNumbers = [
            '113456789',
            '213456789',
        ],
    ),
]

if __name__ == '__main__':
    numbers = set(
        reduce(
            (lambda x, y: x + y), [
                c.phoneNumbers
                for c in CONTACTS
                if c.kozy > 3 and c.iq > 100
            ], []
        )
    )
    print(numbers)


to reduce bije do očí. Proč používáte reduce pro sčítání (spojování), když to stejné dělá sum, případně itertools.chain?


Kód: [Vybrat]
numbers = set(
        sum((c.phoneNumbers for c in CONTACTS if c.kozy > 3 and c.iq > 100), [])
)

ještě drobnost, když už používáte reduce, funkce pro běžné operace jsou v knihovně operators, místo (lambda x, y: x + y), můžete použít operators.add. Lambdy jsou antipattern.
« Poslední změna: 24. 03. 2020, 22:17:08 od A.P.Hacker »

Re:Doporučte programovací jazyk pro Windows
« Odpověď #439 kdy: 24. 03. 2020, 22:40:00 »
Jak udelam v pythonu:

Kód: [Vybrat]
const getImportantPhoneNumbers = users => {
  return users.filter(u => u.kozy > 3)
    .filter(u => u.iq > 100)
    .flatMap(u => u.phoneNumbers)
    .filter((num, index, nums) => nums.indexOf(num) == index);
}


Pokud jsem spravne pochopil ucel programu dovolim si navrhnout 2 optimalizace.
1) pridat filter na heterosexualni zeny
2) otocit podminku na IQ - ty chytry te chtit nebudou


Re:Doporučte programovací jazyk pro Windows
« Odpověď #440 kdy: 24. 03. 2020, 22:51:06 »
K čemu je tam ta sčítací lambda či ta sum?

Re:Doporučte programovací jazyk pro Windows
« Odpověď #441 kdy: 24. 03. 2020, 22:55:49 »
K čemu je tam ta sčítací lambda či ta sum?

v pythonu se listy spojuji operaci scitani, funkce sum secte prvky listu

Kód: [Vybrat]
>>> sum([[1],[2, 3]], [])
[1, 2, 3]

Re:Doporučte programovací jazyk pro Windows
« Odpověď #442 kdy: 25. 03. 2020, 00:04:31 »
Jak udelam v pythonu:

Kód: [Vybrat]
const getImportantPhoneNumbers = users => {
  return users.filter(u => u.kozy > 3)
    .filter(u => u.iq > 100)
    .flatMap(u => u.phoneNumbers)
    .filter((num, index, nums) => nums.indexOf(num) == index);
}

Takhle se da v Pythonu prasit taky
Kód: [Vybrat]
def get_important_phone_numbers(users):
return list(filter(lambda x: x["vozy"] > 3 and
x["iq"] > 100 and not
x.update({'cisla': list(set(x['cisla']))}), users))

Ink

  • *****
  • 502
    • Zobrazit profil
    • E-mail
Re:Doporučte programovací jazyk pro Windows
« Odpověď #443 kdy: 25. 03. 2020, 05:41:53 »

to reduce bije do očí. Proč používáte reduce pro sčítání (spojování), když to stejné dělá sum, případně itertools.chain?


Kód: [Vybrat]
numbers = set(
        sum((c.phoneNumbers for c in CONTACTS if c.kozy > 3 and c.iq > 100), [])
)

ještě drobnost, když už používáte reduce, funkce pro běžné operace jsou v knihovně operators, místo (lambda x, y: x + y), můžete použít operators.add. Lambdy jsou antipattern.

Ano, diky za vylepseni, pane kolego; sum() je asi nejelegantnejsi a chain() nejprehlednejsi a ano, list comprehension je tam zbytecny (jak neuvadis, ale v kodu jsi to prepsal na generator expression).

Ink

  • *****
  • 502
    • Zobrazit profil
    • E-mail
Re:Doporučte programovací jazyk pro Windows
« Odpověď #444 kdy: 25. 03. 2020, 05:51:30 »
K čemu je tam ta sčítací lambda či ta sum?

v pythonu se listy spojuji operaci scitani, funkce sum secte prvky listu

Kód: [Vybrat]
>>> sum([[1],[2, 3]], [])
[1, 2, 3]

Cili obdoba operace flatMap() - ze seznamu cisel jednotlivych ucastnic udela jeden seznam. Tohle mi v tom puvodnim JS kodu bylo jasne na prvni pohled, ale ten pochybny zpusob vylouceni duplicit by se mi lustit nechtelo. Vsadil bych se, ze to JavaScript taky umi lip, jinak by to bylo smutne.

Re:Doporučte programovací jazyk pro Windows
« Odpověď #445 kdy: 25. 03. 2020, 09:01:36 »
Z mého pohledu si ten kód pro distinct v JS a hack se sum řešící flatMap v pythonu nemají co vyčítat, obojí je maximálně nepřehledné.

Mimochodem stačí se podívat, jaký je výkon toho hacku se sum https://stackoverflow.com/a/45323085

Funkce, která u jednoúrovňového číselného seznamu vrátí jedno číslo (jejich součet), u jednoúrovňového nečíselného seznamu hodí chybu, u víceúrovňového s libovolnými hodnotami sníží level o jeden, to opravdu nepovažuji za bezpečného kandidáta pro flatMap. Obzvláště když pythonní proměnná akceptuje cokoliv.

Ink

  • *****
  • 502
    • Zobrazit profil
    • E-mail
Re:Doporučte programovací jazyk pro Windows
« Odpověď #446 kdy: 25. 03. 2020, 09:27:51 »
Funkce, která u jednoúrovňového číselného seznamu vrátí jedno číslo (jejich součet), u jednoúrovňového nečíselného seznamu hodí chybu, u víceúrovňového s libovolnými hodnotami sníží level o jeden, to opravdu nepovažuji za bezpečného kandidáta pro flatMap. Obzvláště když pythonní proměnná akceptuje cokoliv.

Zapominas na kontext - ten kod "flatMapu" (pokud bereme muj priklad po prepisu na sum()) jednoznacne prohrabava List[List[str]], prazdny vstup resi ten 2. parametr funkce sum(). Naprosto bezpecne a verifikovatelne statickou analyzou. Kdyz budes chtit obecnejsi reseni, pouzijes itertools.chain(), pokud budes chtit resit obecne zplosteni, muzes pouzit deepflatten() z toho odkazu. Ale my jsme myslim takhle obecne resit problem nechteli, slo o to ukazat padawanum, ze Python tyhle veci (pro rychle pouziti) hrave zvlada.

Re:Doporučte programovací jazyk pro Windows
« Odpověď #447 kdy: 25. 03. 2020, 11:02:57 »
Z mého pohledu si ten kód pro distinct v JS a hack se sum řešící flatMap v pythonu nemají co vyčítat, obojí je maximálně nepřehledné.

Mimochodem stačí se podívat, jaký je výkon toho hacku se sum https://stackoverflow.com/a/45323085

Funkce, která u jednoúrovňového číselného seznamu vrátí jedno číslo (jejich součet), u jednoúrovňového nečíselného seznamu hodí chybu, u víceúrovňového s libovolnými hodnotami sníží level o jeden, to opravdu nepovažuji za bezpečného kandidáta pro flatMap. Obzvláště když pythonní proměnná akceptuje cokoliv.

me to prijde srozumitelne. soucet listu je jejich spojeni.

Re:Doporučte programovací jazyk pro Windows
« Odpověď #448 kdy: 25. 03. 2020, 11:45:42 »
Mimochodem stačí se podívat, jaký je výkon toho hacku se sum https://stackoverflow.com/a/45323085

sum je stejne pomale jako reduce, vytvari novy list pro kazde spojeni. chtel jsem ukazat, jak nahradit reduce s operaci scitani. jinak urcite lepsi pouzivat itertools.chain

Idris

  • *****
  • 1 902
    • Zobrazit profil
    • E-mail
Re:Doporučte programovací jazyk pro Windows
« Odpověď #449 kdy: 26. 03. 2020, 00:24:50 »
Tenhle hnus je nějaká forma unique nebo distinct?

.filter((num, index, nums) => nums.indexOf(num) == index)

Ano, to je unique, a neni to Lua, ale Javascript - to je takovy ten jazyk, ktery brzo prevalcuje Python, a ktera ma dneska spousta Javistu v zaloze :D

Tvl tady Pythonisti ani neznaji monady, a pritom my to v Jave pouzivame uz od verze 1.8  8)
Tydlencty "monady" mame v Pythonu odjakziva.
Monády jsou pro malé děti, pro profíka jsou triády.