无法遍历字符串并在python中收集字符串列表。类型错误?

时间:2013-02-14 10:53:33

标签: python string int typeerror

我希望能够收集一个字符串列表,用字符串',

分隔一个更大的字符串

但是,我一直收到这个错误:

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 等

2 个答案:

答案 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