DEV Community

Cover image for tips for python short code part-1
ademdj19
ademdj19

Posted on • Edited on

3 1

tips for python short code part-1

1- appending an element to a list:

k+=[1] #same as k.append(1)
Enter fullscreen mode Exit fullscreen mode

2- get multiple lines of from stdin:

instead of

k=[input() for i in range(number_of_lines)]
Enter fullscreen mode Exit fullscreen mode

do

k=[i.strip() for i in open(0)]
Enter fullscreen mode Exit fullscreen mode

3- making a class:
there is multiple modules that have ready porpused classes and types to inherit from or use

usual class

class paper:
    def __init__(self,nl,*lines_):
       self.numberOf_lines = nl
       self.lines = lines_
Enter fullscreen mode Exit fullscreen mode

dataclass

from dataclasses import dataclass
@dataclass
class paper:
    lines: list
    numberOf_lines: int
Enter fullscreen mode Exit fullscreen mode

. . .
this libraries will help u make a readable classes with less characters and awesome features(compareablity , readable representaiton ...)
4- string manipulation:

k = "abcdef-ABCDEF-123456"
print(k[1:])  #  bcdef-ABCDEF-123456
print(k[:-1]) # abcdef-ABCDEF-12345
print(k[2:-2])#   cdef-ABCDEF-1234
print(''.join(filter(str.isupper   , k))) # ABCDEF
print(''.join(filter(str.islower   , k))) # abcdef
print(''.join(filter(str.isnumeric , k))) # 123456
print(*map("".join,zip(*k.split("-")))) # aA1 bB2 cC3 dD4 eE5 fF6
print(*[k[:i] for i in range(len(k))]) # all substrings "a ab abc abcd abcde abcdef ..." 
Enter fullscreen mode Exit fullscreen mode

5- code golfs:

Bi-Output:

lets asume you have to write "odd" if an input is odd and "even" if not
the first thing that come to mind is:

n = int(input())
if n%2==1:print("odd")
else:print("even")
Enter fullscreen mode Exit fullscreen mode

this code is 58 cahracter long
with a bit of python wizardry

print("odd"if int(input())%2else"even")
Enter fullscreen mode Exit fullscreen mode

from 58 char to 39
but we can do more

print("eovdedn"[int(input())%2::2])
Enter fullscreen mode Exit fullscreen mode

from 58 to 35 char

function name is repeated a lot

x,y = map(int,input().split())
names = input().split()
fathers = input().split()
mothers = input().split()
age,shoe_size = map(int,input().split())
weight,height,arm_length = map(float,input().split())
Enter fullscreen mode Exit fullscreen mode

228 char long
we notice that "input().split()" is repeated to many times
solution:

k=lambda:input().split()
x,y = map(int,k())
names = k()
fathers = k()
mothers = k()
age,shoe_size = map(int,k())
weight,height,arm_length = map(float,k())
Enter fullscreen mode Exit fullscreen mode

just like that we saved 47 characters, this example is made for explaining purposes , you can apply it to any repeating funtion or statment with long enough characters. but what i recommend in cases like this is to use stdin file(you can access it with 'open(0)' statment) and dicts to store input

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more →

Top comments (5)

Collapse
 
xtofl profile image
xtofl

Also, when you'd need to append 'a lot' to the same list, you could shortcut k+=[1] to a=k.append; now you can a(1). (save 2 chars per append; becomes profitable when you need N appends where N*len('k+=[]')>len('a=k.append')+N*len('a()') <=> N>5)

k+=[1]
k+=[2]
k+=[3]
k+=[4]
k+=[5]
Enter fullscreen mode Exit fullscreen mode

vs

a=k.append
a(1)
a(2)
a(3)
a(4)
a(5)
Enter fullscreen mode Exit fullscreen mode

Now I'm having fun :)

Collapse
 
marcinpohl profile image
Marcin Pohl

dis('k+=[1]')
1 0 LOAD_NAME 0 (k)
2 LOAD_CONST 0 (1)
4 BUILD_LIST 1
6 INPLACE_ADD
8 STORE_NAME 0 (k)
10 LOAD_CONST 1 (None)
12 RETURN_VALUE
dis('k.append(1)')
1 0 LOAD_NAME 0 (k)
2 LOAD_METHOD 1 (append)
4 LOAD_CONST 0 (1)
6 CALL_METHOD 1
8 RETURN_VALUE

append is faster, because you do not need to create a single element list

Collapse
 
ademdj19 profile image
ademdj19

is it shortest tho

Collapse
 
xtofl profile image
xtofl

Does that code run? map takes a function and an iterable; did you mean map(int, input().split())?

Collapse
 
ademdj19 profile image
ademdj19

thanks