我希望能够收集一个字符串列表,用字符串',
分隔一个更大的字符串但是,我一直收到这个错误:
TypeError: string indices must be integers, not str
这是我的代码,如果有人可以看看它
for f in phonebook:
print f
if phonebook[f] + phonebook[f+1] == "'," :
lineString = phonebook[startpoint:(f+1)]
arrayOfStrings[j] = lineString
startpoint = f+2
j = j+1 #iterate through the array
return arrayOfStrings
我最终想要代码的示例如下:
print arrayOfStrings [1]
445557284
print arrayOfStrings [4]
445558928 等
答案 0 :(得分:3)
每个f
都将成为列表phonebook
中的一个字符串。它是一个列表,所以它需要用整数索引,如你所见。
你想要的是enumerate
for idx, val in enumerate(phonebook):
if phonebook[idx] + phonebook[idx+1] == "',"
你还应该确保检查你的界限,否则你将在这里的列表末尾运行!
还有一个pairwise
的配方可以实现:
from itertools import tee, izip
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return izip(a, b)
for a, b in pairwise(phonebook):
if a + b == "',":
答案 1 :(得分:1)
f
不是phonebook
的索引,而是来自 phonebook
的值。如果需要索引,请使用enumerate
将该索引添加到循环中。因为您正在查看phonebook
中的 next 项,所以只覆盖除最后一个值之外的所有项:
for i, char in enumerate(phonebook[:-1]):
if char + phonebook[i + 1] == "',":
lineString = phonebook[startpoint:i + 1]
arrayOfStrings[j] = lineString
startpoint = i + 2
j += 1
在这种情况下,您甚至可以从1开始enumerate
以便轻松抵消:
for next_index, char in enumerate(phonebook[:-1], 1):
if char + phonebook[next_index] == "',":
lineString = phonebook[startpoint:next_index]
arrayOfStrings[j] = lineString
startpoint = next_index + 1
j += 1