0

我希望能够收集一个字符串列表,该列表将较大的字符串除以标记 ',

但是,我不断收到此错误:

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

我最终希望代码的示例如下:

打印 arrayOfStrings[1]

+445557284

打印 arrayOfStrings[4]

+445558928 等

4

2 回答 2

3

Everyf将成为列表中的字符串之一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 == "',":
于 2013-02-14T10:57:16.387 回答
1

f不是 的索引phonebook,它是来自的值 phonebook。如果您需要一个索引,请使用enumerate将该索引添加到您的循环中。因为您也在查看一项phonebook,所以只循环除最后一个值之外的所有值:

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

在这种情况下,您甚至可以enumerate从 1 开始轻松偏移:

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
于 2013-02-14T10:59:55.953 回答