python join,map和lambda方法
作者:互联网
我是python的新手.有人可以解释这行吗
exec("print(' '.join(map(lambda x: s[x::{0}], range({0}))))".format(ceil(sqrt(len(s)))))
s [x :: {0}]和range({0}))是什么意思?
在下面的代码中详细?
此代码是以下hackerrank问题的解决方案:
https://www.hackerrank.com/challenges/encryption/problem
#!/bin/python3
import sys
from math import ceil, floor, sqrt
def encryption(s):
exec("print(' '.join(map(lambda x: s[x::{0}], range({0}))))".format(ceil(sqrt(len(s)))))
if __name__ == "__main__":
s = input().strip()
result = encryption(s)
解决方法:
这是您的代码的简化版本,应该可以遵循:
from math import ceil, sqrt
s = 'hello'
y = ceil(sqrt(len(s)))
# 3
res = ' '.join(map(lambda x: s[x::y], range(y)))
# 'hl eo l'
要点
> y是s长度的四舍五入的平方根,在这种情况下,sqrt(5)被四舍五入为3.
> lambda是一个匿名函数,它映射range(y)中的每个值,即0、1、2映射到s [x :: y],即返回从索引x开始的序列的每个yth元素.另请参见Understanding Python’s slice notation.x是range(y)成员的任意符号.
>用空格将所有结果值连接在一起以形成单个字符串.
>在原始代码{0}和str.format中,将y以单行形式包含在字符串中.在这种情况下,我认为它是令人费解的和不明智的做法.
标签:python-3-x,string-formatting,python 来源: https://codeday.me/bug/20191109/2012241.html