![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Objekt typu bytes je neměnitelná sekvence bitů. Tato
Mnohá data (obrázky, zvuk, text) lze serializovat (kódovat - encode) na objekt
typu bytes či deserializovat (dekódovat - decode) z typu bytes s použitím
vhodného protokolu, jako je PNG, WAW, JSON nebo UTF-8, ASCII,
cp1250 aj.
Prezentaci objektu ve formátu
Literálový přepis objektu na typ
Řetězec se znaky UTF-8 lze převést funkcí
>>>asc = "Za horami, za lesy"# konformní s ASCii >>>utf = "Bílá růže"# konformní s UTF-8 # Literálová forma pro bytes: >>>lba = b'Za horami, za lesy'; lba b'Za horami, za lesy' >>>lbu = b'Bílá růže'; lbu# bude to chtít funkci SyntaxError: bytes can only contain ASCII characters. # vida
Převod funkcí bytes a encode
Převod na formát
bytes ([source[, encoding[, errors]]])
>>>asc = "Za horami, za lesy" >>>utf = "Bílá růže" >>>bytes (asc, "utf-8") b'Za horami, za lesy' >>>bytes (utf, "utf-8") b'B \xc3\xadl \xc3\xa1r \xc5\xaf \xc5\xbee 'í á ů ž
Znaky, které nejsou součástí ASCII, jsou vyjádřeny hexadecimálními čísly za
zpětnými lomítky (escape sekvence). Na příkladě vidíme, že znaky ze sady UTF-8
(
Převod na formát
string.encode ([encoding[, errors]])
Údaj o kódování (encoding) lze vypustit, pokud souhlasíme s implicitně
nastaveným
>>> "píšeš".encode ()# pro utf-8 je 'encoding' nepovinné b'p\xc3\xad\xc5\xa1e\xc5\xa1' >>> "píšeš".encode ('utf-16')# pro jiné kódování je povinné b'\xff\xfep\x00\xed\x00a\x01e\x00a\x01'
Při deserializaci (decoding) objektu typu bytes na původní objekt musíme vědět, jaké kódování bylo při serializaci použito. To není vždy spolehlivě zjistitelné.
Pro převod použijeme metodu
>>>by =bytes ("píšež", "utf-8"); by# kódování je povinné b'p\xc3\xad\xc5\xa1e\xc5\xa1'# objekt typu bytes >>> by.decode ("utf-8" )# kódování je nepovinné 'píšeš'
Lze také použít funkci
>>>str (by, "utf-8")# kódování je povinné 'píšež'
Typ bytearray je měnitelná verze typu bytes.
# Pro bytearray použijeme funkci bytearray(bytes): >>>ba =bytearray (b'Za horami, za lesy'); ba bytearray(b'Za horami, za lesy')
>>>by = bytes('Souznění', 'utf-8'); by# objekt typu bytes b'Souzn\xc4\x9bn\xc3\xad'# nejde změnit >>>ba =bytearray (by); ba bytearray(b'Souzn\xc4\x9bn\xc3\xad')# případně: >>>ba =bytearray ('Souznění', 'utf-8'); ba bytearray(b'Souzn\xc4\x9bn\xc3\xad')# Úprava iteráblu s konkatenací: >>>ba[0] = 108# změna znaku "S": (ord("l")=108) >>>aba =bytearray ("B", "utf-8") + ba; aba bytearray(b'Blouzn\xc4\x9bn\xc3\xad') >>> str(aba, "utf-8")# převod na řetězec 'Blouznění'
Interní data objektu, uložená ve vyrovnávací paměti (buffer) jsou přístupná
prostřednictvím procedury, zvané
Tento protokol používá sekvenční objekt
Význam objektu
# Vytvoření objektu >>>ba = bytearray('Python','utf-8')# objekt bytearray >>>mvba =memoryview (ba); mvba# objekt memoryview <memory at 0x0000020ED8FD53C0># místo v paměti >>>tmvba =tuple (mvba); tmvba# mvba jako tuple (80, 121, 116, 104, 111, 110)cm_mvba = [chr(i) for i in tmvba]; cm_mvba ['P', 'y', 't', 'h', 'o', 'n']# převod komprehencí viz kap. 3.5 # Změna objektu 'ba' prostřednictvím 'mvba' >>>mvba[0] = 74; ba# chr(74) = J bytearray(b'Jython')# Výsek z objektu 'ba' prostřednictvím 'mvba' >>>slba =tuple (mvba[0:4]); slba (74, 121, 116, 104) >>>cm_slba = [chr(i) for i in slba]; cm_slba ['J', 'y', 't', 'h']# Výsek pro bytes/memoryview/bytearray >>>bymv =bytes (mvba[0:4]); bymv b'Jyth' >>> bymv.decode ('utf-8') 'Jyth'# Výsek pro bytearray/memoryview/bytearray >>>bamv =bytearray (mvba[0:4]); bamv bytearray(b'Jyth') >>> bamv.decode ('utf-8') 'Jyth'
Sekvence memoryview vytvořená z objektu
Všechny soubory jsou v paměti počítače uloženy v binárním formátu. Při otevírání souboru v nějaké aplikaci (například v textovém editoru) je binární formát automaticky převeden do
formátu, který lze číst nebo prohlížet. V prostředí Pythonu nám práci s
binárním formátem umožňuje existence datového typu
Názvy souborů by neměly být stejné jako jména vestavěných objektů (built-ins)
.
S textovými, ani s binárními soubory nepracujeme v Pythonu přímo, nýbrž prostřednictvím takzvaných souborových objektů.
Před vlastní manipulací s obsahem souboru musíme soubor otevřít funkcí
Při práci s textovým i binárním souborem musíme znát dvě věci - kde je soubor uložen a v jakém kódování (UTF-8, ASCII, ...) byl textový soubor uložen, neboli převeden do binárního formátu.
Otevřený souborový objekt (označovaný také jako stream) vzniká použitím funkce
file_obj =open ('file.ext', mode='r', buffering=-1, encoding=None, errors=None, newline=None, closed=True, opener=None) file: název textového či bajtového souboru včetně přípony a případné cesty, pokud nejsme s interpretem Pythonu (shell) přímo 'nacédováni' do nadřazené složky souboru. mode: přístupový režim pro manipulaci se souborem; implicitní hodnota je'r' , 'read'. encoding: žádané kódování např. encoding="utf-8" (kódování "ASCII" netřeba explicitně uvádět)
Kromě pozičního parametru
Funkce
Přístupový režim (mód) určuje, jakou manipulaci lze s otevřeným
souborem provádět. Není-li režim zadán, je implicitně nastaven režim 'r' (
'r', 'rt', 'rb' (read, read text, read binary) pouze pro čtení; ukazovátko na začátku souboru 'w', 'wt', 'wb' (write, write text, write binary) pouze pro psaní; ukazovátko na začátku souboru; přepisuje existující soubor, neexistující vytvoří 'a', 'ab' (append, app. binary) pro připojení textu; ukazovátko na konci existujícího souboru; neexistující soubor vytvoří 'x' vytvoří nový soubor a otevře jej pro psaní ('w') 'r+', 'rb+' pro čtení i psaní - pozor, přepisuje existující soubor# Těmto režimům je lépe se vyhnout: 'w+', 'wb+' pro psaní i čtení; přepisuje existující soubor, neexistující vytvoří 'a+', 'ab+' pro připojení textu i čtení; neexistující soubor vytvoří
Mód | Deklarovaný soubor existuje   | DS neexistuje |
---|---|---|
'r' read | DS je otevřen pro čtení; ukazovátko je na počátku. |
|
'w' write | DS je otevřen pro psaní; stáv. obsah je vymazán. | Vytvoří se nový soubor |
'a' append | DS je otevřen pro psaní; ukazovátko je na konci textu. | Vytvoří se nový soubor |
'x' exclusive | | Vytvoří se nový soub. pro psaní |
'r+' | DS je otevřen pro čtení a psaní; ukazovátko je na počátku. | |
'w+' | Smaže stáv. obsah; otevře pro psaní a čtení |
Vytvoří se nový soubor |
'a+' | DS je otevřen pro připojení nového zápisu a pro čtení. Ukazovátko je na konci. |
Vytvoří se nový soubor |
Kromě přístupových režimů je při práci se souborovými objekty důležité znát typ kódování, v jakém byl ošetřovaný soubor vytvořen. Dobrým způsobem jak to zjistit, je otevření souboru v textovém editoru
Jednoduchá invokace souborového objektu pro kódování v ANSII má tuto formu:
>>>myfile =open ('week_en.txt')# implicitní režim "r" a kódování "ANSII"
Pro UTF-8 i ASCII použijeme deklaraci:
>>>myfile =open ('week_cz.txt', encoding="utf-8")# implicitní režim "r"
Otevřený souborový objekt musíme po ukončení práce zavřít, neboť tato procedura je poměrně náročná na paměť a práci operačního systému.
Použijeme k tomu metodu myfile
>>> myfile.close ()# myfile je název objekt. souboru
Alternativně lze k deklaraci objektového souboru použít idiom
# proměnné 'cez' a 'eng' obsahují cesty k ošetřovaným souborům: >>>cez = "F:/cesta/files/week_cz.txt"# český text: >>>eng = "F:/cesta/files/week_en.txt"# anglický text # idiom 'with open': >>>with open (cez, encoding="utf-8") asdny :read ()) pondělí úterý středa čtvrtek pátek sobota neděle >>># otevřený soubor je automaticky zavřen
Při práci s existujícími soubory je alternativně možné být "nacédován" v jim nadřazené složce (zde
Windows Command Precessor F:\cesta\files> py# zde přejdeme do prostředí Pythonu Python 3.13.5 (tags/v3.13.5:6cb20a2, Jun 11 2025, 16:15:46) [MSC v.1943 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>
Ve složce
Nyní si v této složce vytvoříme prázdný soubor
>>>ovoce =open ('fruits_cz.txt', 'w', encoding='utf-8')# hop a je tu lidoop - podívejte se do složky 'files' >>> ovoce.close ()# otevřený objekt zase zavřeme
Tímto kódem si ověříme, že nám interpret Pythonu rozuměl a že nám vyhověl:
>>>
Příkaz
Pokud by soubor
Pro vkládání dat do souborového objektu použijeme metodu
>>> ovoce.write ("hrušky\ntřešně\nšvestky\nmeruňky\n"))# uloženo 31 >>> ovoce.write (" Nezapomeňte zavřít soubor.")# rovněž uloženo 27 >>> ovoce.close ()# máme zavříno
Znak newline (
Nyní můžeme soubor opět otevřít, tentokrát pro čtení a načíst jeho obsah do výstupu v našem programu. Pokud není mód uveden, je implicitně zaveden mód
>>>ovoce =open ('fruits_cz.txt', encoding="utf-8") >>>read ()) hrušky třešně švestky meruňky Nezapomeňte zavřít soubor. >>>next (ovoce)# zkusíme ještě iteraci StopIteration # iterátor je prázdný >>> ovoce.close ()
Metoda
Potřebujeme-li z objektu znovu číst, můžeme přesunout jeho ukazovátko (pointer) na začátek metodou
K idiomu
# try_finally.py ovo = "F:/cesta/files/fruits_cz.txt"# cesta k souboru ovoce = open(ovo, encoding="utf-8")# souborový objekt try :read (23))readline ())readlines ())# jsme na konci souboru tell ())# kde je ukazovátko? seek (0,0))# jsme na začátku finally : ovoce.close ()# zavíráme
>>>%Run try_finally.py 1. hrušky# výstup z "read(23)" třešně# dtto švestky# dtto 2. meruňky# výstup z "readline()" 3. [' Nezapomeňte zavřít soubor.']# výstup z "readlines()" 4. 72# výstup z "tell()" 5. 0# výstup ze "seek(0,0)"
Metoda
Metoda
Metoda
Následující funkce kopíruje textový soubor tak, že přečte a zapíše zadaný počet znaků najednou. První argument je jméno původního souboru, druhý argument je jméno nového souboru:
copy_file.py def copy_file (staré_fru, nové_fru):infile =open ("unsorted_fruits.txt", "r")# soubor existuje outfile =open ("copied_fruits.txt", "w")# je vytvořen while True: text = infile.read (150)# zadaný max. počet znaků if text == "": break outfile.write (text) infile.close () outfile.close ()return ... Invokace funce: copy_file('unsorted_fruits.txt', 'copied_fruits.txt') ...
Tato funkce cyklicky čte znaky z
Soubor
Na objekt typu
Soubory, které obsahují fotografie, obrázky, videa, zvukový záznam, zipové a spustitelné soubory - se nazývají binární soubory. Tyto soubory nejsou organizovány do řádků a nelze je (užitečně) otevřít normálním textovým editorem .
V Pythonu tyto soubory regulerně otevřeme již popsanou funkcí
copy_motýl.py f =open ("motýl.jpg", "rb")# exist. kopír. soubor g =open ("motýl_copy.jpg", "wb")# tento se zároveń vytvoří while True: buff = f.read(3300)# pomocný objekt 3300 bitů if len(buff) == 0: break g.write (buff) f.close () g.close ()
Soubor
V následující ukázce si vytvoříme nový soubor a vložíme do něho text v kódování utf-8. Následně si tento soubor otevřeme jako objekt typu
with-open.py with open ("cat.txt", "w", encoding="utf-8") as cat: cat.write("Kočička")with open ("cat.txt", "rb") as cat: data = cat.read()
>>> data b'Ko\xc4\x8d i\xc4\x8d ka'
Ve výstupu vidíme, že písmeno
Soubor s příponou
Vestavěné (built-in) moduly jsou psány v jazyce C a jsou součástí
standardní knihovny Pythonu - viz Python Module Index. Příkladem vestavěných modulů jsou moduly
Jako vlastní modul můžeme použít vhodný textový soubor s příponou
Importovaný modul je nejprve hledán v témže adresáři, v němž je přítomen importující soubor. Poté je hledán mezi vestavěnými (built-in) moduly. Následně je hledán v seznamu adresářů s názvem
V následující ukázce vidíme jednoduchý příklad
# file_a.py # zamýšlený modul def mocnina (m, n=3):format (m, n, m**n))# přímo proveditelný příkaz
V další ukázce si předvedeme vliv příkazu
# file_b.py import file_a # bez přípony '.py' if __name__ == "__main__": else:
Realizace tohoto souboru v Thonny či IDLE umožní přístup k definici funkce
>>>%Run file_b.py # jsme v konzole Quo vadis?# výstup z file_a Nazdárek Kašpárek# výstup z file_b Hodnota proměnné __name__ je __main__# výstup z file_b Soubor file_b.py byl invokován přímo.# výstup z file_b 6**3 = 216# mocnina z file_b,a >>> >>> file_a.mocnina(5,4)# invokace s použitím tečkové notace 5**4 = 625
Import modulu lze provést různým způsobem.
a) Importujeme celý modul a jeho objekty evokujeme tečkovou notací:
>>>import file_a # import modulu >>> file_a.mocnina(4)# aktivace objektu z modulu 4**3 = 64Případně importujeme celý modul pod jiným jménem >>>import file_a asf_a >>> f_a.mocnina(4)# aktivace objektu (zde funkce) z modulu 4**3 = 64
b) Importujeme všechny objekty z modulu:
>>>from file_a import * >>> file_a.mocnina(4)# aktivace objektu z modulu 64# Tento způsob se nedoporučuje, neboť může dojít ke kolizi importovaných jmen se jmény lokálními.
c) Importujeme jen určité objekty modulu
>>>from math import pi, factorial as fact >>> pi, fact(8) (3.141592653589793, 40320)
Importujeme-li vestavěný modul, můžeme jej importovat odkudkoli. Vlastní modul můžeme importovat :
Řekněmež, že si pro ukládání vlastních modulů vytvoříme složku
C:/> py# Terminál Python 3.13.5 (tags/v3.13.5:6cb20a2, Jun 11 2025, 16:15:46) >>> import sys >>> sys.path.insert(0, 'F:\\Howtopy\\Cesty')# seznam 'sys.path' si nyní vytiskneme: >>> print(sys.path) ['', 'F:\\Howtopy\\Cesty', 'C:\\Users\\Bertík\\AppData\\Local\ \Programs\\Python\\Python313\\python313.zip', 'C:\\ ... ]
Paket (package) je adresář, který spolu s potřebnými soubory (moduly)
V našem paketu se také sama vytvoří složka
Doplníme tedy paket
# plus_ab.py def plus (a,b):
# class_foo.py class Foo :# deklarace třídy (viz kap. 10) def ukul (self):# metoda (funkce) třídy
Oba soubory můžeme evokovat v konzole Terminálu:
C:/> py# Terminál Python 3.13.5 (tags/v3.13.5:6cb20a2, Jun 11 2025, 16:15:46) >>> import plus_ab# cestu si najde Python sám >>> plus_ab.plus(5,8) 13
C:/> python Python 3.13.5 (tags/v3.13.5:6cb20a2, Jun 11 2025, 16:15:46) >>> import class_foo# import modulu >>> inst = class_foo.Foo()# vytvoření instance třídy >>> inst.ukul()# volání metody třídy Ukulele
Modul
>>>import sys >>> sys.path# použité a použitelné cesty ['D:\\IDE\\Thonny\\lib\\ ... \\lib\\site-packages'] >>> sys.version# verze použitého Pythonu 3.13.5 (tags/v3.13.5:6cb20a2, Jun 11 2025, 16:15:46) >>> for name in sys.builtin_module_names: print(name, end=", ")# výpis vestavěných modulů _abc, _ast, _bisect, _blake2, _codecs, ... ... itertools, marshal, math, mmap, msvcrt, nt, sys, time, reg, xxsubtype, zlib,
Úplný obsah modulu
>>> dir(sys)
Aplikaci Numpy je nutné nejprve instalovat. Ve Windows s instalovaným programem Python s aplikací pip to je jednoduché:
C:\> pip install numpy# velikost cca 15 MB
Knihovnu Numpy je nutné importovat do aktuálního pracovního prostředí Pythonu:
>>> import numpy asnp
Numpy používá vlastní formát kolektoru, zvaný array neboli pole. Prvky tohoto kolektoru musí být homogenní - to jest, musí být stejného typu
.
Datový typ pole může být jedno- (1D, vektor), dvou- (2D, matice), tři-
(3D, tenzor) i více (nD) dimenzionální.
Dimenzím se v Numpy říká osy
(axes). Velikost pole je vyjádřena atributem shape (tvar), což je entice
celých čísel, která vyjadřují délky jednotivých os (dimenzí).
Array v Numpy vytvoříme ze seznamu příkazem
>>> a = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) >>> a[1][2] 7 >>> a.shape (2,4)# počet os = počtu prvků v entici
Uvedené pole má dvě osy (je to tedy matice) o délkách 2 a 4 položky. Pro přístup k vybranému prvku matice lze použít indexy (počínající nulou).
Součin dvou matic je v Numpy líbezně prostý:>>> a = np.array([[1,2,3], [4,5,6]]) >>> b = np.array([[7,8], [9,1], [2,3]]) >>> c = np.matmul (a, b) >>> c.shape (2, 2) >>> print(c) [[31, 19], [85, 55]]
Protože solidnější popis práce s modulem Numpy přesahuje rámec tohoto tutoriálu, odkazuji případné zájemce na tuto webovou stránku.
Array je kolektor, podobně jako seznam. Na rozdíl od seznamu, který
je vestavěným objektem Pythonu, je nutné objekt array vytvořit
importovanou funkcí
# Import funkce z modulu array: >>> fromarray import array asarr >>>arrpy = arr("i", [3, 6, 9, 12]); arpy array('i', [3, 6, 9, 12])# Import celého modulu >>>import array asarr >>> arrpy =arr .array ("i", [3, 6, 9, 12]) >>>type (arrpy) <class 'array.array'># Import z modulu numpy: >>>import numpy asnp >>> arrnp =np .array (["numbers", 3.6, 6.9, 12]) >>>
Deklarace kolektoru
array_name = invokace_fce_array('type_code', [seznam_hodnot])
Údajem 'type_code' zadáváme typ a velikost jednotlivých elementů v bajtech :
signed integer: 'b'(1), 'i'(2) float : 'f'(4), 'd'(8) unicode char: 'u'(2)# aktuálně 'deprecated'
Modul array obsahuje také řadu metod
>>> import array as arr# import celého modulu >>> ar_ray = arr.array('i', [1, 2, 3, 4]); ar_ray array('i', [1, 2, 3, 4])
# insert >>> ar_ray.insert(3,9); ar_ray array('i', [1, 2, 3, 9, 4])# remove >>> ar_ray.remove(1); ar_ray array('i', [2, 3, 9, 4])# pop >>> ar_ray.pop(2); ar_ray 9 array('i', [2, 3, 4])
Kolektory array s výhodou použijeme při rozsáhlejších matematických výpočtech, neboť jsou rychlejší než standardní seznamy (lists).
V Kap. 8.11.2 je popisováno, jak lze rozdělit pole náhodných čísel [0,1) na
intervaly (
Tento soubor čísel (frekvenční tabulku) je možné graficky znázornit histogramem, vytvořeným pomocí knihovny Matplotlib.
python -m pip install -U matplotlib# velikost cca 12 MB
Podrobný popis práce s tímto nástrojem lze nalézt například zde.
>>> python mean.py 3 4 3.5 >>> python mean.py 3 4 5 4.0 >>> python mean.py 11 15 94.5 22 35.625Vztah mezi vstupy a výstupy u vašeho programu by měl být stejný jako v uvedené ukázce.
sum(iterable[, start]) iterable je sekvence číselných hodnot - viz kap. 4.1 [, start] je nepovinná hodnota, která se přičte k součtu
>>> python median.py 3 7 11 7 >>> python median.py 19 85 121 85 >>> python median.py 11 15 16 22 15.5
>>> import calendar >>> year = calendar.calendar(2020) >>> print(year)
Alternativně se lze k webové stránce s nápovědou Pydoc dostat příkazem:
>>> python -m pydoc -p 7464
To aktivuje webový server pydoc na portu 7464. Jeho stránku ve vašem webovém prohlížeči aktivuje příkaz:
>>> [b]rowserSpuštěný server deaktivuje příkaz:
> [q]uit
Použijte tento postup ke spuštění
Dělejte si podrobné poznámky o svém zkoumání v tomto cvičení.
print((mymodule1.myage - mymodule2.myage) ==
(mymodule1.year - mymodule2.year))
Spustíte-li
>>> import thisCo říká Tim Peter o jmenných prostorech?
>>> import string >>> dir(string)
>>> s = "If we took the bones out, \ it wouldn't be crunchy, would it?" >>> s.split()
>>> type(s.split())
>>> s.split('o')
>>> s.split('i')
>>> '0'.join(s.split('o'))
Vaše řešení má projít oběma doctesty. Tutéž úlohu řešte také přímo s použitím metodydef myreplace (old, new, s):""" Nahraď všechny argumenty 'old' argumenty 'new' v řetězci 's'. """ >>> myreplace(',', ';', 'this, that, and, some, other, thing') 'this; that; and; some; other; thing' >>> myreplace(' ', '**', 'Words will now be separated by stars.') 'Words**will**now**be**separated**by**stars.'
if __name__ == '__main__':
import doctest
doctest.testmod()
Vysvětlete jak tento příkaz usnadňuje užití a testování vytvořeného modulu.
Jaká bude hodnota Modul si uložte pro použití jeho procedur v jiných programech.def cleanword (word):""" >>> cleanword('what?') 'what' >>> cleanword('"now!"') 'now' >>> cleanword('?+="word!,@$()"') 'word' """ def has_dashdash (s):""" >>> has_dashdash('distance--but') True >>> has_dashdash('several') False >>> has_dashdash('critters') False >>> has_dashdash('spoke--fancy') True >>> has_dashdash('yo-yo') False """ def extract_words (s):""" >>> extract_words('Now is the time!"Now", is the time? Yes, now.') ['now', 'is', 'the', 'time', 'now', 'is', 'the', 'time', 'yes', 'now'] >>> extract_words('she tried to curtsey as she spoke--fancy') ['she', 'tried', 'to', 'curtsey', 'as', 'she', 'spoke', 'fancy']i """ def wordcount (word, wordlist):""" >>> wordcount('now', ['now', 'is', 'time', 'is', 'now', 'is', 'is' ]) ['now', 2] >>> wordcount('is', ['now', 'is', 'time', 'is', 'now', 'is', 'the' , 'is']) ['is', 4] >>> wordcount('time', ['now', 'is', 'time', 'is', 'now', 'is', 'is']) ['time', 1] >>> wordcount('frog', ['now', 'is', 'time', 'is', 'now', 'is', 'is']) ['frog', 0] """ def wordset (wordlist):""" >>> wordset(['now', 'is', 'time', 'is', 'now', 'is', 'is']) ['is', 'now', 'time'] >>> wordset(['I', 'a', 'a', 'is', 'a', 'is', 'I', 'am']) ['I', 'a', 'am', 'is'] >>> wordset(['or', 'a', 'am', 'is', 'are', 'be', 'but', 'am']) ['a', 'am', 'are', 'be', 'but', 'is', 'or'] """ def longestword (wordset):""" >>> longestword(['a', 'apple', 'pear', 'grape']) 5 >>> longestword(['a', 'am', 'I', 'be']) 2 >>> longestword(['this', 'that', 'supercalifragilisticexpialidoci ous']) 34 """
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |