如何使用列表理解来做到这一点?

时间:2016-07-17 21:18:18

标签: python python-2.7

a='abcdcdc'
list_=[x*3 for x in a]
print list_

这是打印这个OK !!!! :

['aaa', 'bbb', 'ccc', 'ddd', 'ccc', 'ddd', 'ccc']

但我怎么打印这个? :

['abc','cdc','cdc']

3 个答案:

答案 0 :(得分:4)

您可以使用:

>>> [a[i:i+3] for i in range(0,len(a) - 1,2)]
['abc', 'cdc', 'cdc']

这意味着i将获得以下值:

>>> list(range(0,len(a) - 1,2))
[0, 2, 4]

(因为列表理解遍历i)。这意味着range(0,len(a) - 1,2)0开始,以2为增量,它会增加,直到达到最高值但不超过len(a) - 1。 Python 3文档中有关于range()的更长解释,这有助于阅读。

这意味着它会将a切片到所需的片段中(符号a[i:j]表示它会从ij获取片段a)。它首先会获取切片a[0:0 + 3],然后是切片a[2:2 + 3],最后是切片a[4:4 + 3],它们是您正在寻找的字符串。

我们从a的长度中减去1,否则我们不会得到我们想要的结果:

>>> [a[i:i+3] for i in range(0,len(a),2)]
['abc', 'cdc', 'cdc', 'c']

答案 1 :(得分:0)

[a[i]+a[i+1]+a[i+2] for i in range(0,len(a)-1,2)]

答案 2 :(得分:0)

在这里使用list comprehension实际上可能与Python的 zen相反(“简单比复杂更好”)。

虽然其他列表理解答案是正确的,但需要一段时间才能理解它们的工作原理。

另一方面,乍一看下面的代码并不难理解:

a='abcdcdc'

for i in range(0, len(a), 2):
    b = a[i:i+3]
    if len(b) == 3:
        print(b)