Operator
Negating Boolean
if not C:
if C<1:
if~-C:
And operator
if a and b:
if a*b:
if i==4 and j==4:
if i==4and j==4:
if(i,j)==(4,4):
if i==j==4:
Increment or decrement 1 in statement
c/(n-1)
c/~-n
c/(n+1)
c/-~n
while n-1:
while~-n:
or n+1
or-~n
While n!=1
while n!=1:
while n-1:
while~-n:
shorter than the list selection
[0,y][b] -> y*b
[1,y][b] -> y**b
[x,1][b] -> b or x
[x,x+1][b] -> x+b
[x,x-1][b] -> x-b
[1,-1][b] -> 1|-b
[x,~x][b] -> x^-b
Ceil and Floor
math.floor(n)
n//1
math.ceil(n)
-(-n//1)
Types
Check type of a variable
x*0is 0 # integer
x*0=="" # string
x*0==[] # array
Convert integer to string
str(n)
`n`
Join list of string or integer
L=['a', 'b', 'c']
''.join(L)
`L`[2::5]
L=[1, 2, 3]
`L`[1::3]
2 String same length or 1 length diff
'ftarlusee'[C::2]
List all substrings
# with repeat
f=lambda s:[*s]and[s]+f(s[1:])+f(s[:-1])
# avoid repeat
f=lambda s:{*s}and{s}|f(s[1:])|f(s[:-1])
Iterable & Iterator
List of range
L=list(range(10))
*L,=range(10)
Get last and first element from a list
e=L[-1]
*_,e=L
e=(L)[0]
e,*_=L
Append and Extend to list
L.append(e)
L+=e,
L.extend(e)
L+=e
For in range
for i in range(x):pass
# if x less than 4
for x in 0,1,2:pass
# if don't use i
for _ in[0]*x:pass
# for use twice
r=0,
for _ in r*x:pass
for _ in r*-~x:pass
# use exec with multiply string
exec'pass;'*x
Multiple numerical loops
for i in range(m):
for j in range(n):
do_stuff(i,j)
for k in range(m*n):
do_stuff(k/n,k%n)
# Three loop
for i in range(m):
for j in range(n):
for l in range(o):
do_stuff(i,j,l)
for k in range(m*n*b):
do_stuff(k/n/o,k%(n*o)/o,k%o)
Check element in iterable
if e in S
if{e}&S
Reverse List
L.reverse()
L[::-1]
Check negative integer in a list
min(L)<0
'-'in`L`
Checking the length of a list
a==[] # a is empty
[]==a # for [] in the front and reduce 1 space
a # a is not empty
a>a[:i] # len(a) < i
Copy/Clone a list
a=x[:]
b=[*x]
c=x*1
Multiple if statements in comprehensions
[a for a in 'abc'if cond1()and cond2()or cond3()and cond4()and cond5()]
[a for a in 'abc'if cond1()if cond2()or cond3()if cond4()if cond5()]
Split into chunks
l=(n for n in range(18))
zip(*[l]*4)
Unpack generator
set(G)
{*G}
list(G)
[*G]
*L,=G
tuple(G)
(*G,)
T=*G,
Others
Reading from stdin
import os;A=os.read(0,9**9)
import os;A=os.read(0,99) # input is always less than 100 bytes.
Multiline input to list
list(sys.stdin.readlines())
eof='' # End of line you want to stop
list(iter(input,eof))
Import when use once
import itertools
itertools.groupby()
__import__("itertools").groupby()
Reference
Discussion & Responses
Powered by GitHub Discussions · Sign in to participate
Loading discussion thread...