首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Pythonic将逗号分隔的数字拆分成对的方法

Pythonic将逗号分隔的数字拆分成对的方法
EN

Stack Overflow用户
提问于 2009-05-15 20:10:32
回答 4查看 6.7K关注 0票数 17

我想把一个逗号分隔值分成几对:

代码语言:javascript
复制
>>> s = '0,1,2,3,4,5,6,7,8,9'
>>> pairs = # something pythonic
>>> pairs
[(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)]

pythonic的东西会是什么样子的?

如何检测和处理包含奇数组数字的字符串?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-05-15 20:15:56

类似于:

代码语言:javascript
复制
zip(t[::2], t[1::2])

完整示例:

代码语言:javascript
复制
>>> s = ','.join(str(i) for i in range(10))
>>> s
'0,1,2,3,4,5,6,7,8,9'
>>> t = [int(i) for i in s.split(',')]
>>> t
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> p = zip(t[::2], t[1::2])
>>> p
[(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)]
>>>

如果项目数为奇数,则最后一个元素将被忽略。只会包含完整的配对。

票数 44
EN

Stack Overflow用户

发布于 2009-05-15 20:29:29

一种更通用的选项,也适用于迭代器,并允许组合任意数量的项:

代码语言:javascript
复制
 def n_wise(seq, n):
     return zip(*([iter(seq)]*n))

如果你想得到一个懒惰的迭代器而不是一个列表,就用itertools.izip代替zip。

票数 8
EN

Stack Overflow用户

发布于 2009-09-15 21:53:29

这是一个很像FogleBirds的解决方案,但是使用迭代器(生成器表达式)而不是列表理解。

代码语言:javascript
复制
s = '0,1,2,3,4,5,6,7,8,9'
# generator expression creating an iterator yielding numbers
iterator = (int(i) for i in s.split(','))

# use zip to create pairs
# (will ignore last item if odd number of items)
# Note that zip() returns a list in Python 2.x, 
# in Python 3 it returns an iterator
pairs = zip(iterator, iterator)

列表理解和生成器表达式都可能被认为是非常"pythonic“的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/870652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档