列表中的字符串大小限制

时间:2017-07-12 06:39:39

标签: python string list

我试图使用Python自动化无聊的东西。它几乎已经完成,但是列表中的字符串存在问题。

我从.txt文件中逐行收集一些数据,我把它放在一个列表中,然后我更改了一些需要更改的字符串。

问题是我列表中字符串的长度似乎受前一个字符串的长度限制(在我的情况下,文本中的字符串)。

要恢复,例如len(data[0]) = 5。如果我试图输入一个包含6个字符或更多字符的字符串,它将会被删除。

我该如何处理?一个想法?

感谢。

已编辑:

def dxf_copy_lines(f):
    text = f.readlines()
    i = 0
    lines_copied = []
    lines_to_delete = set(())
    while text[i] != 'TEXT\n':
        i = i + 1
    j = i
    while text[j] != 'VIEWPORT\n':
        lines_copied = np.append(lines_copied, text[j])
        j = j + 1
    print(lines_copied)
    return lines_copied

def modify_lines(lines_copied, ref_dim, id_f,num):

    n = len(lines_copied)
    for i in range(n):
        print (lines_copied[i][0:5])
        if lines_copied[i][0:5] == 'nazwa':
            lines_copied[i] = ref_dim.rstrip() + ' Pos. '+ id_f.rstrip()
        if lines_copied[i][0:3] == 'szt':
            lines_copied[i] = 'szt: ' + num +'\n'
    print(lines_copied)
    return lines_copied

1 个答案:

答案 0 :(得分:1)

问题是您使用的是numpy数组。这肯定是 numpy数组的用例。考虑:

>>> import numpy as np
>>> lines = []
>>> text = ['abc','de','fghk','lmnop','qrs']
>>> for line in text:
...     lines = np.append(lines, line)
...
>>> lines
array(['abc', 'de', 'fghk', 'lmnop', 'qrs'],
      dtype='<U32')

因此linesnumpy.ndarray的{​​{1}}。数组元素假设为固定大小。这是允许dtype='<U32'进行快速数值计算的原因。所以,numpy意味着你的数组是32的unicode字符串。考虑如果我尝试用大于32的字符串更改数组的元素会发生什么:

dtype='<U32'

被截断了!

>>> lines[2] = "this is an extremely, very very very, long long long, line"
>>> lines
array(['abc', 'de', 'this is an extremely, very very ', 'lmnop', 'qrs'],
      dtype='<U32')

希望现在这很有道理。

这实际上不是>>> len('this is an extremely, very very ') 32 的用例,它实际上更慢。以下操作:

numpy

是O(N)。由于您是在循环中进行的,因此它会按比例缩放。另一方面,python列表可以使用lines_copied = np.append(lines_copied, text[j]) ,这将是一个恒定的时间操作!