zigzag conversion

🏠
 1 from collections import defaultdict as dd
 2 
 3 class Solution(object):
 4     def convert(self, s, numRows):
 5         x, y, xi, yi, i = 0, 0, 0, 0, 0
 6         o = {i:dd(list) for i in range(numRows)}
 7         while i < len(s):
 8             top = i % ((numRows-1) * 2) == 0
 9             bottom = i % (numRows-1) == 0
10             if top:
11                 x, y = 0, 1
12             elif bottom:
13                 x, y = 1, -1
14             o[yi][xi] = s[i]
15             xi, yi, i = xi+x, yi+y, i+1
16         return ''.join([''.join(x.values()) for x in o.values()])
17 
18 print(Solution().convert("PAYPALISHIRING", 3))