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 full post →

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

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more