这听起来很基本,但我还没想到用Python做这个简洁直接的方法
我有一个像"abcdefgh"
这样的字符串,我需要创建一个元素列表,一次从字符串中选取两个字符来获取['ab','cd','ef','gh']
。
我现在正在做的是这个
output = []
for i in range(0,len(input),2):
output.append(input[i:i+2])
有更好的方法吗?
答案 0 :(得分:4)
In [2]: s = 'abcdefgh'
In [3]: [s[i:i+2] for i in range(0, len(s), 2)]
Out[3]: ['ab', 'cd', 'ef', 'gh']
答案 1 :(得分:2)
只是为了好玩,如果你讨厌for
>>> s='abcdefgh'
>>> map(''.join, zip(s[::2], s[1::2]))
['ab', 'cd', 'ef', 'gh']
答案 2 :(得分:1)
有更好的方法吗?
不确定。列表理解可以做到这一点。
def n_chars_at_a_time(s, n=2):
return [s[i:i+n] for i in xrange(0, len(s), n)]
应该做你想做的事。 s[i:i+n]
返回从i
开始,后来以n
字符结尾的子字符串。
n_chars_at_a_time("foo bar baz boo", 2)
产生
['fo', 'o ', 'ba', 'r ', 'ba', 'z ', 'bo', 'o']
在python REPL中。
有关详细信息,请参阅Generator Expressions and List Comprehensions:
迭代器输出上的两个常见操作是
- 对每个元素执行一些操作,
- 选择满足某些条件的元素子集。
醇>例如,给定一个字符串列表,您可能希望从每一行中去掉尾随空格或提取包含给定子字符串的所有字符串。
列表推导和生成器表达式(简短形式:“listcomps”和“genexps”)是这种操作的简明表示法......