字符串对于.join太长时的解决方法。发生溢出错误

2024-06-28 11:40:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理一些python问题pythonchallenge.com网站为了自学python,我遇到了一个障碍,因为我要使用的字符串太大,python无法处理。我收到这个错误:

my-macbook:python owner1$ python singleoccurrence.py
Traceback (most recent call last):
  File "singleoccurrence.py", line 32, in <module>
    myString = myString.join(line)
OverflowError: join() result is too long for a Python string

对于这个问题,我有什么选择?我的代码看起来像这样。。。在

^{pr2}$

Tags: 字符串pycom网站my错误linemacbook
1条回答
网友
1楼 · 发布于 2024-06-28 11:40:20

string.join没有按你的想法做。join用于使用给定的分隔符将单词列表组合成单个字符串。即:

>>> ",".join(('foo', 'bar', 'baz'))
'foo,bar,baz'

您发布的代码片段将尝试在变量行中的每个字符之间插入myString。你可以看到它是如何迅速变大的:-)。你想把整个文件读入一个字符串吗,myString?如果是这样,那么连接字符串的方式如下:

^{pr2}$

当我在这里的时候。。。既然您正在学习Python,这里有一些其他建议。在

有更简单的方法将整个文件读入变量。例如:

fileIN = open("testdata.txt", "r")
myString = fileIN.read()

(这将不会具有现有strip()代码的确切行为,但实际上可能会执行您想要的操作。)

另外,我永远不会推荐实用的Python代码使用递归来迭代字符串。您的代码将对字符串中的每个字符进行函数调用(和堆栈项)。另外,我不确定Python在bigString[1:]的所有用法方面是否会非常聪明:它很可能会在内存中创建第二个字符串,它是原始字符串的副本,而不是第一个字符。处理字符串中每个字符的最简单方法是:

for mychar in bigString:
    ... do your stuff ...

最后,使用名为“checked”的列表来查看您以前是否见过特定的字符。但是对列表的成员资格测试(“如果myChar在checked中”)是缓慢的。在Python中,最好使用字典:

checked = {}
...
if not checked.has_key(myChar):
    checked[myChar] = True
    ...

您正在做的这个练习是学习几个Python习惯用法的好方法。在

相关问题 更多 >