Skip to content

Instantly share code, notes, and snippets.

@chrosta
Last active January 12, 2019 08:32
Show Gist options
  • Save chrosta/e00ecc44edae54b0bab0fdd0340462c8 to your computer and use it in GitHub Desktop.
Save chrosta/e00ecc44edae54b0bab0fdd0340462c8 to your computer and use it in GitHub Desktop.
###
# Variace na renesanční téma, aneb reverze prvků seznamu pomocí FP v Pythonu.
#--
# 1. Vraci nový (v původním SEZNAM zůstává) seznam s přeházenými prvky.
# 2. Tohle není FP (ale hezčí třeba pro použít v kódu), upravuje SEZNAM.
# 3. Použití MAP a LAMBDA, upravuje SEZNAM (v náročnosti na systémové
# prostředky to může být k diskuzi, protože MAP vrátí seznam prvků None).
# 4. Dobrá obdoba příkladu 3 s MAP a LAMBDA, výsledkem MAP je nový seznam
# přeházených prvnů (původní SEZNAM zůstává). Elegancí odpovídá příkladu 1.
# 5. To samé, co je v příkladu 3, takže pokud to potřebujete nějak takhle, je
# lepší příklad 2 (kde MAP a LMBDA taky není). FOR opět vyrobí seznam s prvky
# None.
# 6. Jako příklad 5, ale vyrobí se generátor, což se zdá že vychází trochu
# paměťově úspornější.
#--
# Samozřejmě na přehazování prvků v seznamu existuje metoda reverse, takže
# SEZNAM = SEZNAM.reverse(), popř. jde použít slicing (sekvence) přes konstrukci
# print ['a','b','c','d','e','f','g'][::-1] (tečka).
###
import sys
# (1)
SEZNAM = ['a','b','c','d','e','f','g']
print [SEZNAM[len(SEZNAM) - (i + 1)] for i in range(len(SEZNAM))]
# (2)
SEZNAM = ['a','b','c','d','e','f','g']
for i in range(len(SEZNAM)): SEZNAM.insert(len(SEZNAM) - (i + 1), SEZNAM.pop(0))
# (3)
SEZNAM = ['a','b','c','d','e','f','g']
map(lambda x: SEZNAM.insert(len(SEZNAM) - (x + 1), SEZNAM.pop(0)), range(len(SEZNAM)))
print SEZNAM
# (4)
SEZNAM = ['a','b','c','d','e','f','g']
print map(lambda x: SEZNAM[len(SEZNAM) - (x + 1)], range(len(SEZNAM)))
# (5)
SEZNAM = ['a','b','c','d','e','f','g']
G = [SEZNAM.insert(len(SEZNAM) - (x + 1), SEZNAM.pop(0)) for x in range(len(SEZNAM))]
print sys.getsizeof(G)
print sys.getsizeof(SEZNAM)
print SEZNAM
# (6)
SEZNAM = ['a','b','c','d','e','f','g']
G = (SEZNAM.insert(len(SEZNAM) - (x + 1), SEZNAM.pop(0)) for x in range(len(SEZNAM)))
print sys.getsizeof(G)
print sys.getsizeof(SEZNAM)
print SEZNAM
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment