问个问题 'abcdefghigklmnopqrstuvwxyz'怎么切成 ['abc','def','ghi'…]这样的形式啊

2016-04-17 20:08:17 +08:00
 whnzy
如题!
5324 次点击
所在节点    Python
29 条回复
seki
2016-04-17 20:13:33 +08:00
SErHo
2016-04-17 20:14:01 +08:00
["abcdefghigklmnopqrstuvwxyz"[i: i+3] for i in range(0, len("abcdefghigklmnopqrstuvwxyz"), 3)]
aec4d
2016-04-17 20:48:10 +08:00
re.findall('.{3}','abcdefghigklmnopqrstuvwxyz')
billion
2016-04-17 20:51:16 +08:00
2 楼正解。
hcwhan
2016-04-17 20:53:27 +08:00
2 楼这样 如果不是 3 的倍数会报索引超出 错误吧
wittyfox
2016-04-17 21:20:35 +08:00
str = ('a'..'z').to_a.join
# => "abcdefghijklmnopqrstuvwxyz"

str.split('').each_slice(3).to_a.map(&:join)
=> ["abc",
"def",
"ghi",
"jkl",
"mno",
"pqr",
"stu",
"vwx",
"yz"]
wittyfox
2016-04-17 21:26:22 +08:00
如果核心库更完善的话,像这样:

```ruby
String.class_eval do
include Enumerable
alias :each :each_char
end
```

那就可以这样:

```ruby
str.each_slice(3).to_a
```
dant
2016-04-17 21:28:58 +08:00
@wittyfox 然而这里是 Python 版(
seki
2016-04-17 21:34:12 +08:00
@hcwhan 不会
sjtlqy
2016-04-17 21:36:56 +08:00
xuboying
2016-04-17 21:44:16 +08:00
能用正则就用正则啊
#!python
import re
x="abcdefghijklmnopqrstuvwxyz"
print re.findall(r".{1,3}",x)
xcodebuild
2016-04-17 21:46:21 +08:00
JavaScript 版:

'abcdefghigklmnopqrstuvwxyz'.match(/.{3}/g) // => ["abc", "def", "ghi", "gkl", "mno", "pqr", "stu", "vwx"]
ty0716
2016-04-17 21:54:11 +08:00
>>> import textwrap
>>> end.join(textwrap.wrap(body, chunklen))

https://docs.python.org/2/library/textwrap.html
SakuraSa
2016-04-17 22:04:47 +08:00
以前用过一个奇怪的方法实现:

```python
s,n='abcdefghigklmnopqrstuvwxyz',3
g=iter(s)
print([''.join(i) for i in zip(*[g]*n)])
```

>>> ['abc', 'def', 'ghi', 'gkl', 'mno', 'pqr', 'stu', 'vwx']


要保留最后的 yz 的话,可以:

```python
import itertools
s,n='abcdefghigklmnopqrstuvwxyz',3
g=iter(s)
print([''.join(j for j in i if j) for i in itertools.izip_longest(*[g]*n)])
```

>>>['abc', 'def', 'ghi', 'gkl', 'mno', 'pqr', 'stu', 'vwx', 'yz']
leavic
2016-04-17 22:22:06 +08:00
from more_itertools import chunked


搞定了
msg7086
2016-04-17 23:54:52 +08:00
@wittyfox 就知道有人会贴 ruby 版 w
araraloren
2016-04-18 10:58:58 +08:00
~~ perl6 版

```perl6
#!/usr/bin/env perl6


# 3 个一组合
say (comb /\w ** 3/, ['a' ... 'z'].join);

# 输出 (abc def ghi jkl mno pqr stu vwx)


# 保留 yz
say (comb /\w ** 3 | \w ** 2/, ['a' ... 'z'].join);

# 输出 (abc def ghi jkl mno pqr stu vwx yz)
```
liyj144
2016-04-18 13:43:52 +08:00
参考 2 楼,加上末尾的处理: re.findall('.{3}|.{2}$','abcdefghigklmnopqrstuvwxyz')
liyj144
2016-04-18 13:45:02 +08:00
@liyj144 刚写错了,是三楼
HustLiu
2016-04-18 14:32:13 +08:00
@codefalling 可以优化一下 /.{1,3}/g ,这样避免字符串长度不是 3 的倍数出现遗漏

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

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

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

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

© 2021 V2EX