|  |      1RIcter      2014-06-19 23:34:03 +08:00 | 
|  |      2ddzz      2014-06-19 23:38:51 +08:00 这种花拳绣腿功能是专门用来打广告的 | 
|  |      3orancho      2014-06-19 23:40:34 +08:00 笑看二楼无脑黑,懒得吵,好不好用自己心里知道 | 
|  |      5manfay      2014-06-19 23:46:41 +08:00 S1 = 'abcdefghijklmnopqrstuvwx' S2 = 'bcdefghijklmnopqrstuvwxy' L = [a+b for a in S1 for b in S2] | 
|  |      12incompatible      2014-06-20 00:37:03 +08:00 卧槽 搞java和groovy的完全看不懂你们在说什么 到底什么场景下会需要遍历'ab'-'xy'这些玩意儿?? | 
|  |      13kzing OP @incompatible 也许可以类比一下Linux? 比如要生成某些连续的文件; 又比如做爬虫时遍历一连串有规律的渐变的URL? 再比如做算法题的时候需要一个映射数字到字母组合的映射? 懂得少, 没想出必须要用到的地方. 但我觉得存在即意义, 如果一点用都没有的话, 我也就不会从Ruby文档看到这个了:) 我的本意是交流这个问题的Pythonic实现. 谢谢. | 
|  |      14mulog      2014-06-20 00:53:35 +08:00 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" 总之大概这个意思 | 
|  |      16orzfly      2014-06-20 01:04:32 +08:00  1 Ruby 里也用不上 ('ab'..'xy').to_a 啊,用 [*'aa'..'zz'] 就好了~\(≧▽≦)/~啦啦啦 | 
|  |      17glasslion      2014-06-20 01:07:10 +08:00 数学老师死的早系列 | 
|  |      18mikale      2014-06-20 01:18:48 +08:00 [x+y for x in map(chr,range(97,122)) for y in map(chr,range(97,122))] | 
|  |      19dreampuf      2014-06-20 02:04:59 +08:00  1 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 | 
|      20pandada8      2014-06-20 08:15:07 +08:00  1 import itertools import string ("".join(i) for i in itertools.product(string.ascii_lowercase, repeat=2)) | 
|  |      21s51431980      2014-06-20 09:46:09 +08:00 当大牛花了半小时想出两行pythonic代码的时候,实习生用几分钟写了四行简明但看起来不pythonic的代码实现了相同的功能 | 
|  |      22shyrock      2014-06-20 10:11:50 +08:00 就代码易读易理解来说,我觉得5楼的最好。而且我认为这就是优雅。 | 
|      23Kabie      2014-06-20 10:29:18 +08:00 很可惜上面所有直接遍历的实现都是错的…………至少……和Ruby里的行为不同…… 这个还是朴实的做个生成器吧。。。 当然……ruby里的这个字符串succ的行为有很多特例。。。唯一能正确实现的办法……恐怕只能是把 http://www.ruby-doc.org/core-2.1.2/String.html#method-i-succ 的代码翻译成Python了…… | 
|      25generic      2014-06-20 10:43:22 +08:00 via Android @Kabie 这个例子告诉我们,在X语言社区里问“Y语言的某功能在X语言里怎么实现”,最好先说明其在Y语言里的行为。 | 
|  |      26wangtai      2014-06-20 11:48:34 +08:00 小弟不懂Ruby,请问各位Ruby大神,这种写法一般在什么场景下使用啊 | 
|  |      27est      2014-06-20 12:02:13 +08:00  1 哈哈,LZ这个卡位比较好。几个python解结果和LZ的结果不一样。 | 
|      29generic      2014-06-20 12:13:32 +08:00 | 
|  |      31hahastudio      2014-06-20 12:46:46 +08:00  1 关键是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" ] | 
|      32yuankui      2014-06-20 13:21:44 +08:00 写个函数吧。。 to_a('aa','zz') rets ['aa',...,'zz'] | 
|  |      35binux      2014-06-20 14:12:07 +08:00 这个返回里面有 az 吗?如果有 az 为什么会有,不是只到 xy 吗?那有 aA,aZ 吗? 不理解这个函数是干嘛的。 | 
|  |      36manfay      2014-06-20 14:55:42 +08:00 如果返回里有 az ,那么这个函数就是 Python 想要避免的 implicit. Explicit is better than implicit. | 
|  |      37blacktulip      2014-06-20 14:56:20 +08:00 via iPhone 此贴好好玩,you are not your programming language. 不用觉得伤自尊。 | 
|      38Kabie      2014-06-20 16:07:16 +08:00 https://github.com/topazproject/topaz/blob/master/topaz/objects/stringobject.py#L274 String#succ 的 python 版。。。。。。其实和 C 没啥区别了。。。 | 
|  |      39reusFork      2014-06-20 16:48:40 +08:00 | 
|      40jinyiming321      2014-06-20 18:24:55 +08:00 ruby这个是抄perl的。。。 | 
|  |      41est      2014-06-20 18:38:09 +08:00  2 @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的“妙用”只是一个巧合。 | 
|  |      42hahastudio      2014-06-20 19:18:58 +08:00 @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也有 所以优雅只是相对的,对不用的语言,优雅的地方有时不一样;对同一个语言的同一种语法,有时优雅,有时就不怎么好看了 | 
|  |      43mikale      2014-06-21 15:13:11 +08:00 方法给了,还要一样,真是矫情,来一个跟题目一样的。 [x+y for x in map(chr,range(97,121)) for y in map(chr,range(98,122))] | 
|  |      44yykrlc      2020-06-16 11:50:19 +08:00 ruby 的 x =  {"a": 1 "b": 2} y = 'b' > x[y] => nil > x[:b] => 2 怎么解我不能传值:b 吧 |