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

2014 年 6 月 19 日
 kzing
单纯的实现从'a'到'z'的遍历不难, 但是如果要实现这样的
输入: ('ab'..'xy').to_a

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

可能就比较复杂

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

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

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

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

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

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

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

© 2021 V2EX