Python 怎么优雅的实现 Ruby 的('a'..'z').to_a 操作?

2014-06-19 23:31:20 +08:00
 kzing
单纯的实现从'a'到'z'的遍历不难, 但是如果要实现这样的
输入: ('ab'..'xy').to_a

输出: ["ab", "ac", "ad",... ... ,"xw", "xx", "xy"]

可能就比较复杂

有比较Pythonic的方法或者算法吗?
8919 次点击
所在节点    Python
44 条回复
est
2014-06-20 18:38:09 +08:00
@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的“妙用”只是一个巧合。
hahastudio
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也有
所以优雅只是相对的,对不用的语言,优雅的地方有时不一样;对同一个语言的同一种语法,有时优雅,有时就不怎么好看了
mikale
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))]
yykrlc
2020-06-16 11:50:19 +08:00
ruby 的 x = {"a": 1 "b": 2}
y = 'b'
> x[y]
=> nil
> x[:b]
=> 2
怎么解我不能传值:b 吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/118528

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX