我想把一个逗号分隔值分成几对:
>>> 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的东西会是什么样子的?
如何检测和处理包含奇数组数字的字符串?
发布于 2009-05-15 20:15:56
类似于:
zip(t[::2], t[1::2])
完整示例:
>>> 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)]
>>>
如果项目数为奇数,则最后一个元素将被忽略。只会包含完整的配对。
发布于 2009-05-15 20:29:29
一种更通用的选项,也适用于迭代器,并允许组合任意数量的项:
def n_wise(seq, n):
return zip(*([iter(seq)]*n))
如果你想得到一个懒惰的迭代器而不是一个列表,就用itertools.izip代替zip。
发布于 2009-09-15 21:53:29
这是一个很像FogleBirds的解决方案,但是使用迭代器(生成器表达式)而不是列表理解。
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“的。
https://stackoverflow.com/questions/870652
复制相似问题