我有一个非常长的字符串。我想将此字符串拆分为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=[]
我无法弄清楚此代码有什么问题。
答案 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]