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的方法或者算法吗?
8944 次点击
所在节点    Python
44 条回复
RIcter
2014-06-19 23:34:03 +08:00
ddzz
2014-06-19 23:38:51 +08:00
这种花拳绣腿功能是专门用来打广告的
orancho
2014-06-19 23:40:34 +08:00
笑看二楼无脑黑,懒得吵,好不好用自己心里知道
RIcter
2014-06-19 23:42:27 +08:00
@orancho 幫你@一下>_>
cc @ddzz
manfay
2014-06-19 23:46:41 +08:00
S1 = 'abcdefghijklmnopqrstuvwx'
S2 = 'bcdefghijklmnopqrstuvwxy'
L = [a+b for a in S1 for b in S2]
orancho
2014-06-19 23:47:26 +08:00
@RIcter 不用,已经blocked了
kzing
2014-06-20 00:23:27 +08:00
@RIcter 这个模块大家都会, 但是你贴这个链接似乎对我没有什么帮助 :)
kzing
2014-06-20 00:25:11 +08:00
@ddzz :) 这么看来, Ruby中很多我认为很酷的功能都是花拳绣腿啊
kzing
2014-06-20 00:27:05 +08:00
@manfay 不错唉, 提供了一个思路. 谢谢.
RIcter
2014-06-20 00:28:58 +08:00
@kzinglzy 我发的链接稍微看一下里面的内容啊,有实现的
kzing
2014-06-20 00:31:05 +08:00
@RIcter 不会吧= =! 自认已经看过很多遍Itertools模块了, 指点一下?
incompatible
2014-06-20 00:37:03 +08:00
卧槽 搞java和groovy的完全看不懂你们在说什么

到底什么场景下会需要遍历'ab'-'xy'这些玩意儿??
kzing
2014-06-20 00:48:47 +08:00
@incompatible 也许可以类比一下Linux? 比如要生成某些连续的文件; 又比如做爬虫时遍历一连串有规律的渐变的URL? 再比如做算法题的时候需要一个映射数字到字母组合的映射? 懂得少, 没想出必须要用到的地方. 但我觉得存在即意义, 如果一点用都没有的话, 我也就不会从Ruby文档看到这个了:)

我的本意是交流这个问题的Pythonic实现. 谢谢.
mulog
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"
总之大概这个意思
kzing
2014-06-20 00:57:43 +08:00
@mulog 谢谢你, 这是Ruby的一个用法, 我也刚学, 觉得这样用很酷就拿过来玩一下了. 先睡觉了.
orzfly
2014-06-20 01:04:32 +08:00
Ruby 里也用不上 ('ab'..'xy').to_a 啊,用 [*'aa'..'zz'] 就好了~\(≧▽≦)/~啦啦啦
glasslion
2014-06-20 01:07:10 +08:00
数学老师死的早系列
mikale
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))]
dreampuf
2014-06-20 02:04:59 +08:00
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
pandada8
2014-06-20 08:15:07 +08:00
import itertools
import string
("".join(i) for i in itertools.product(string.ascii_lowercase, repeat=2))

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

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

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

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

© 2021 V2EX