Portál AbcLinuxu, 13. května 2025 18:33
mmm = ( ['a', 'b', 'c'] ) i = mmm.index('b') print ivrati
1
ale kdyz vytvorim takoveto pole:
mmm = ( ['a', 'b', 'c'], ['d', 'e', 'f'] ) i = mmm.index('b') print inejde to:
Traceback (most recent call last): File "pole.py", line 25, in <module> i = mmm.index('b') ValueError: tuple.index(x): x not in listJak se da prohledavat takoveto pole?
( ['a', 'b', 'c'] ) == ['a', 'b', 'c']
A co si představuješ, že by to mělo v druhém případě vrátit?
>>> mmm = ( ['a', 'b', 'c'], ['d', 'e', 'f'] ) >>> print mmm[1] ['d', 'e', 'f'] >>> print mmm[1][1] ePredstavoval bych si, ze to vrati to [1][1].
list
obsahující prvky a
, b
a c
:
mmm = ( ['a', 'b', 'c'] )Jde o obyčejné pole (
list
).
Toto je 1-tuple
obsahující list
, který zase obsahuje prvky a
, b
a c
:
mmm = ( ['a', 'b', 'c'], )Jde o „pole polí“ (přesněji
tuple
list
ů).
A konečně toto je 2-tuple
obsahující dva list
y s prvky a
, b
, c
, resp. d
, e
, f
:
mmm = ( ['a', 'b', 'c'], ['d', 'e', 'f'] )Opět
tuple
list
ů.
Jestli chceš funkci na rekurzivní prohledávání polí, budeš si ji muset napsat. A, jak psal Michal Čihař, je otázkou, co by tak asi měla vracet.
>>> a, b = [], [] >>> c = [a,b] >>> a.extend([b,c]) >>> b.extend([a,c])Jak by sis asi představoval, že tam bude rekursivní index() fungovat? Co má přesně vrátit c.index(c)? Nekonečné pole? Má to hledat nejdřív do hloubky nebo do šířky? Je zjevné, že obecné rekursivní prohledávání od index() čekat nelze, takže chceš-li ho, musíš za daných předpokladů vlastnostech těch dat napsat. Např. toto je seznam všech dvojic indexů, kde se 'a' vyskytuje v tvém mmm:
[(x[0],x[1].index('a')) for x in enumerate(mmm) if 'a' in x[1]]
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.