1
RIcter 2014 年 6 月 19 日
|
2
ddzz 2014 年 6 月 19 日
这种花拳绣腿功能是专门用来打广告的
|
3
orancho 2014 年 6 月 19 日
笑看二楼无脑黑,懒得吵,好不好用自己心里知道
|
5
manfay 2014 年 6 月 19 日
S1 = 'abcdefghijklmnopqrstuvwx'
S2 = 'bcdefghijklmnopqrstuvwxy' L = [a+b for a in S1 for b in S2] |
12
incompatible 2014 年 6 月 20 日
卧槽 搞java和groovy的完全看不懂你们在说什么
到底什么场景下会需要遍历'ab'-'xy'这些玩意儿?? |
13
kzing OP @incompatible 也许可以类比一下Linux? 比如要生成某些连续的文件; 又比如做爬虫时遍历一连串有规律的渐变的URL? 再比如做算法题的时候需要一个映射数字到字母组合的映射? 懂得少, 没想出必须要用到的地方. 但我觉得存在即意义, 如果一点用都没有的话, 我也就不会从Ruby文档看到这个了:)
我的本意是交流这个问题的Pythonic实现. 谢谢. |
14
mulog 2014 年 6 月 20 日
s = string.ascii_lowercase
result = [t[0]+t[1] for t in itertools.product(s, repeat=2)] # or result = [a+b for a in s for b in s] 其实没太看懂你到底想输出啥,既然有"xx"为啥没有"aa" 总之大概这个意思 |
16
orzfly 2014 年 6 月 20 日 Ruby 里也用不上 ('ab'..'xy').to_a 啊,用 [*'aa'..'zz'] 就好了~\(≧▽≦)/~啦啦啦
|
17
glasslion 2014 年 6 月 20 日
数学老师死的早系列
|
18
mikale 2014 年 6 月 20 日
[x+y for x in map(chr,range(97,122)) for y in map(chr,range(97,122))]
|
19
dreampuf 2014 年 6 月 20 日 os.popen("echo {a..x}{b..y}").read().split()
[a+b for a, b in itertools.product(string.lowercase[:-2], string.lowercase[1:-1])] 这种比较会不会只能证明 Because I can. Pythonic的楼上已经有了,规规矩矩的。总之要实现语言不支持的特性时,import this |
20
pandada8 2014 年 6 月 20 日 import itertools
import string ("".join(i) for i in itertools.product(string.ascii_lowercase, repeat=2)) |
21
s51431980 2014 年 6 月 20 日
当大牛花了半小时想出两行pythonic代码的时候,实习生用几分钟写了四行简明但看起来不pythonic的代码实现了相同的功能
|
22
shyrock 2014 年 6 月 20 日
就代码易读易理解来说,我觉得5楼的最好。而且我认为这就是优雅。
|
23
Kabie 2014 年 6 月 20 日
很可惜上面所有直接遍历的实现都是错的…………至少……和Ruby里的行为不同……
这个还是朴实的做个生成器吧。。。 当然……ruby里的这个字符串succ的行为有很多特例。。。唯一能正确实现的办法……恐怕只能是把 http://www.ruby-doc.org/core-2.1.2/String.html#method-i-succ 的代码翻译成Python了…… |
26
wangtai 2014 年 6 月 20 日
小弟不懂Ruby,请问各位Ruby大神,这种写法一般在什么场景下使用啊
|
27
est 2014 年 6 月 20 日 哈哈,LZ这个卡位比较好。几个python解结果和LZ的结果不一样。
|
29
generic 2014 年 6 月 20 日
|
31
hahastudio 2014 年 6 月 20 日 关键是LZ太欺负人= =
不给清楚里面怎么迭代的= = 哪知道"ax"后面是 "ay", "az", "ba", "bb" 啊= = 这应该是从aa到zz里面掐了ab到xy这一段= = 我给一个比较Pythonic的方案,在14L @mulog 的方案上稍微改一下就可以 反正没有缩进,就直接在这里贴了 用了''.join(t),这样你想涨长就改repeat和if里的边界就好了= = import string import itertools s = string.ascii_lowercase result = [ ''.join(t) for t in itertools.product(s, repeat=2) if "ab" <= ''.join(t) <= "xy" ] |
32
yuankui 2014 年 6 月 20 日
写个函数吧。。
to_a('aa','zz') rets ['aa',...,'zz'] |
35
binux 2014 年 6 月 20 日
这个返回里面有 az 吗?如果有 az 为什么会有,不是只到 xy 吗?那有 aA,aZ 吗?
不理解这个函数是干嘛的。 |
36
manfay 2014 年 6 月 20 日
如果返回里有 az ,那么这个函数就是 Python 想要避免的 implicit.
Explicit is better than implicit. |
37
blacktulip 2014 年 6 月 20 日 via iPhone
此贴好好玩,you are not your programming language. 不用觉得伤自尊。
|
38
Kabie 2014 年 6 月 20 日
https://github.com/topazproject/topaz/blob/master/topaz/objects/stringobject.py#L274
String#succ 的 python 版。。。。。。其实和 C 没啥区别了。。。 |
39
reusFork 2014 年 6 月 20 日
|
40
jinyiming321 2014 年 6 月 20 日
ruby这个是抄perl的。。。
|
41
est 2014 年 6 月 20 日 @hahastudio 同意。为什么只遍历到a-z,为什么不会遍历大写A-Z?
把LZ的语句改一下: ('Ww'..'xy').to_a 那么请问Ruby为何不W X Y Z a b c ... w x 这样遍历?为什么不会xy结尾停止而是Zz停止? ('[a'..'xy').to_a 为什么又只会遍历 [ 开头的,但是不会结束于[y而是[z??? 所以总结一句话:滥用语言特性,隐蔽黑魔法。LZ的“妙用”只是一个巧合。 |
42
hahastudio 2014 年 6 月 20 日
@est 对,ruby的这块感觉很莫名其妙的
大写..小写会在Z处断片 再加几个 >> ("aa".."ZZ").to_a => [] >> ('[ab'..'xy').to_a => ["[ab"] >> ("01".."10").to_a => ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10"] >> ("a01".."z10").to_a => 你会看到"a99", "b00" >> ("01a".."10b").to_a => 你会看到"01z", "02a", "02b", "02c",最后是"09z", "10a", "10b" 这种跟期待不一样的返回值还是有点伤人的 嘛,不过是个语言都有一些坑,Python也有 所以优雅只是相对的,对不用的语言,优雅的地方有时不一样;对同一个语言的同一种语法,有时优雅,有时就不怎么好看了 |
43
mikale 2014 年 6 月 21 日
方法给了,还要一样,真是矫情,来一个跟题目一样的。
[x+y for x in map(chr,range(97,121)) for y in map(chr,range(98,122))] |
44
yykrlc 2020 年 6 月 16 日
ruby 的 x = {"a": 1 "b": 2}
y = 'b' > x[y] => nil > x[:b] => 2 怎么解我不能传值:b 吧 |