list.append()我错在哪里?

时间:2015-04-03 17:19:18

标签: python

我有一个非常长的字符串。我想将此字符串拆分为16个字符长的子字符串,每次跳过一个字符(例如,substring1 =字符串的前16个元素,substring2从元素18到元素34,依此类推)并列出它们。

我写了以下代码:

string="abcd..."
list=[]
for j in range(0,int(len(string)/17)-1):
    list.append(string[int(j*17):int(j*17+16)])

但它返回:

list=[]

我无法弄清楚此代码有什么问题。

4 个答案:

答案 0 :(得分:0)

它确实有效 - 但仅适用于超过16个字符的字符串。

range(0,int(len(string)/17)-1)

但是,对于字符串" abcd ...",int(len(string)/17)-1)是-1。添加一些逻辑来捕获< 16个案例并且你很好:

...
for j in range(0, max(1, int(len(string)/17)-1)):
  ...

答案 1 :(得分:0)

以下内容应该有效:

#!/usr/bin/python

string="abcdefghijklmnopqrstuvwxyz"
liszt=[]
leng=5
for j in range(0,len(string)/leng):
  ibeg=j*(leng+1)
  liszt.append(string[ibeg:ibeg+leng])
if ibeg+leng+1 < len(string):
  liszt.append(string[ibeg+leng:])
print liszt

答案 2 :(得分:0)

这有用吗?

>>> from string import ascii_lowercase
>>> s = ascii_lowercase * 2
>>> s
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'
>>> spl = [s[i:i+16] for i in range(0, len(s), 17)]
>>> spl
['abcdefghijklmnop', 'rstuvwxyzabcdefg', 'ijklmnopqrstuvwx', 'z']

答案 3 :(得分:0)

>>> string="abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"

原始代码,不掩盖内置代码(排除最终的全长字符串及其后的任何部分字符串):

>>> l = []
>>> for j in range(0,int(len(string)/17)-1):
...     l.append(string[int(j*17):int(j*17+16)])
...
>>> l
['abcdefghijklmnop', 'rstuvwxyzabcdefg', 'ijklmnopqrstuvwx']

包含所有可能字符串的已清理版本:

>>> for j in range(0,len(string),17):
...     l.append(string[j:j+16])
...
>>> l
['abcdefghijklmnop', 'rstuvwxyzabcdefg', 'ijklmnopqrstuvwx', 'zabcdefghijklmno', 'qrstuvwxyz']

我们如何将最后一个变为理解?每个人都喜欢理解。

>>> l = [string[j:j+16] for j in range(0,len(string),17)]

如果我们想要,我们可以过滤掉太短的字符串:

>>> l = [string[j:j+16] for j in range(0,len(string),17) if len(string[j:j+16])>=16]