Python一行代码(将Perl转换为Python)

6

我在想是否可以使用pyp来创建一个一行代码,具有与此相同的功能。

perl -l -a -F',' -p -e'if ($. > 1) { $F[6] %= 12; $F[7] %= 12;$_ = join(q{,}, @F[6,7]) }'

这个程序接收一个逗号分隔的数字列表,每行8个数字,并以相同的格式输出,但是每行最后两个数字会对12取模。同时,它也会先原样输出第一行(标题行)。

我有很多这样晦涩的perl单行程序,首先我想把它们全部翻译成python。


2
你能展示一下你在使用Pyp实现这个功能时尝试了什么,以及你已经完成了多少吗?你是否卡在了某个特定的问题上? - kojiro
1个回答

4

声明一下,我不确定我是否赞同这种写法。水平编写代码似乎并没有比垂直编写更好,友好地说,我有点怀疑实践中它提供的优势是否像表面看起来的那样多。Python 的一大乐趣在于你不再需要担心写 GolfScript 了。

话虽如此,我们可以考虑:

pyp "mm | p if n==0 else (p[:-2] + [(int(x)%12) for x in p[-2:]]) | mm"

该操作会生成:

localhost-2:coding $ cat exam.pyp 
a,b,c,d,e,f,g,h
11,22,33,44,55,66,77,88
12,23,34,45,56,67,78,89
13,24,35,46,57,68,79,80
localhost-2:coding $ cat exam.pyp | pyp "mm | p if n==0 else (p[:-2] + [(int(x)%12) for x in p[-2:]]) | mm"
a,b,c,d,e,f,g,h
11,22,33,44,55,66,5,4
12,23,34,45,56,67,6,5
13,24,35,46,57,68,7,8

【免责声明:这是我第一次编写的pyp程序,大约10分钟前下载的。】

这个一行代码的速度确实有问题。对于一个有 500000 秒的文件,Perl 代码只需要不到 2 秒。但 Python 代码似乎永远都无法完成。它在非常小的文件上运行良好。 - marshall
我刚刚创建了一个大的测试文件,其中包含以下代码:for j in xrange(500000): print ",".join(str(i) for i in [random.choice(xrange(1000)) for i in xrange(8)]) - marshall
已发布单独的问题https://dev59.com/VXHYa4cB1Zd3GeqPPL0L。 - marshall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接