为什么列表删除功能不能删除空格?

内森·布莱克
string = "hello world i'm a new program"
words_length = []
length = 21

re.split用来产生单词和空格的列表:

words = re.split('\w', string)

所以:

words = ['hello', ' ', 'world', ' ', 'i', "'", 'm', ' ', 'a', ' ', 'new', ' ', 'program']

for x in words:
    words_length.append(len(x))

    for x in range(len(words)):
        if words_length < length:
        words_length += letters_length[x]
        line += words[x]    
        del words[x]

但是最后,当我打印变量时,我得到了:

line = "helloworldi'manew"
words = [' ', ' ', ' ', ' ', ' ', 'program']

但是我想要的是:

line = "hello world i'm a new"
words = ['program']

我该如何做到这一点?

马丁·彼得斯(Martijn Pieters)

您正在跳过索引,因为要从列表中删除字符。

每次删除一个字符时,该字符右侧所有内容都会向左向上移动一级,而其索引会向下移动一个。但是您的x索引仍然上升一个,因此现在您引用列表中的后一个元素:

  1. for循环的第一次迭代:

    x == 0
    words == ['hello', ' ', 'world', ' ', 'i', "'", 'm', ' ', 'a', ' ', 'new', ' ', 'program']
    #        0        1    2        3    4    5    ...
    words[x] == 'hello'
    
    del words[x]
    words == [' ', 'world', ' ', 'i', "'", 'm', ' ', 'a', ' ', 'new', ' ', 'program']
    #         0    1        2    3    4    5    ...
    
  2. 循环的第二次迭代:

    x == 1
    words == [' ', 'world', ' ', 'i', "'", 'm', ' ', 'a', ' ', 'new', ' ', 'program']
    #         0    1        2    3    4    5    ...
    words[x] == 'world'
    
    del words[x]
    words == [' ', ' ', 'i', "'", 'm', ' ', 'a', ' ', 'new', ' ', 'program']
    #         0    1    2    3    4    5    ...
    
  3. 循环的第三次迭代

    x == 2
    words == [' ', ' ', 'i', "'", 'm', ' ', 'a', ' ', 'new', ' ', 'program']
    #         0    1    2    3    4    5    ...
    words[x] == 'i'
    
    del words[x]
    words == [' ', ' ', "'", 'm', ' ', 'a', ' ', 'new', ' ', 'program']
    #         0    1    2    3    4    5    ...
    

至少循环之后,才从列表中删除条目您无需在循环中将其删除:

line = []
current_length = 0
for i, word in enumerate(words):
    current_length += len(word)
    if current_length > length:
        i -= 1
        break
    line.append(word)
# here i is the index of the last element of words actually used
words = words[i + 1:]  # remove the elements that were used.
line = ''.join(line)

或者,您可以删除单词(从效率高的反向列表中删除),但是然后使用while循环并测试累积的长度:

line = []
current_length = 0
reversed_words = words[::-1]
while reversed_words:
    l = len(reversed_words[-1])
    if current_length + l > length:
        break
    line.append(reversed_words.pop())
    current_length += l
words = reversed_words[::-1]
line = ''.join(line)

但是,如果您尝试将行长换行应用于Python字符串,则可以避免使用textwrap模块重新发明该滚轮它可以轻松地在最大长度内进行换行:

wrapped = textwrap.fill(string, length)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我的删除功能不能将节点从BST中删除?

来自分类Dev

VBA:联合功能不能删除不连续的列

来自分类Dev

为什么循环功能不能与空列表一起使用?

来自分类Dev

为什么循环功能不能与空列表一起使用?

来自分类Dev

为什么RHR功能不能超载?

来自分类Dev

为什么该记忆功能不能线性运行?

来自分类Dev

为什么这个功能不能正常工作?

来自分类Dev

为什么我的 Javascript 功能不能正常工作?

来自分类Dev

为什么此Perl随机播放功能不能随机播放?

来自分类Dev

为什么某些Emacs功能不能通过`Mx`使用?

来自分类Dev

为什么此功能不能正确打开和关闭LED?

来自分类Dev

为什么这个jQuery remove功能不能正常工作?

来自分类Dev

为什么我的“获取”功能不能真正获取字符串?

来自分类Dev

为什么Knockout的点击编辑功能不能在表格中使用多个值?

来自分类Dev

为什么仅声明朋友功能不能具有默认参数?

来自分类Dev

为什么同步睡眠功能不能通过内部承诺使异步?

来自分类Dev

为什么我的堆排序功能不能按预期工作?

来自分类Dev

为什么多层异步功能不能捕获节点最低级别抛出的错误?

来自分类Dev

为什么我的功能不能正常工作两次?

来自分类Dev

为什么此功能不能打印所有值?

来自分类Dev

为什么仅声明朋友功能不能具有默认参数?

来自分类Dev

为什么此功能不能正确打开和关闭LED?

来自分类Dev

为什么该功能不能在油脂猴子上使用

来自分类Dev

为什么Linux中的“系统”功能不能运行此shellscript?

来自分类Dev

为什么计数功能不能在Spark中使用mapvalues?

来自分类Dev

为什么信号功能不能使用信号工作?

来自分类Dev

减少功能不能处理空列表

来自分类Dev

为什么我的链接列表删除功能不起作用?

来自分类Dev

为什么此功能不能在即7,8(延迟和淡入)上起作用?

Related 相关文章

  1. 1

    为什么我的删除功能不能将节点从BST中删除?

  2. 2

    VBA:联合功能不能删除不连续的列

  3. 3

    为什么循环功能不能与空列表一起使用?

  4. 4

    为什么循环功能不能与空列表一起使用?

  5. 5

    为什么RHR功能不能超载?

  6. 6

    为什么该记忆功能不能线性运行?

  7. 7

    为什么这个功能不能正常工作?

  8. 8

    为什么我的 Javascript 功能不能正常工作?

  9. 9

    为什么此Perl随机播放功能不能随机播放?

  10. 10

    为什么某些Emacs功能不能通过`Mx`使用?

  11. 11

    为什么此功能不能正确打开和关闭LED?

  12. 12

    为什么这个jQuery remove功能不能正常工作?

  13. 13

    为什么我的“获取”功能不能真正获取字符串?

  14. 14

    为什么Knockout的点击编辑功能不能在表格中使用多个值?

  15. 15

    为什么仅声明朋友功能不能具有默认参数?

  16. 16

    为什么同步睡眠功能不能通过内部承诺使异步?

  17. 17

    为什么我的堆排序功能不能按预期工作?

  18. 18

    为什么多层异步功能不能捕获节点最低级别抛出的错误?

  19. 19

    为什么我的功能不能正常工作两次?

  20. 20

    为什么此功能不能打印所有值?

  21. 21

    为什么仅声明朋友功能不能具有默认参数?

  22. 22

    为什么此功能不能正确打开和关闭LED?

  23. 23

    为什么该功能不能在油脂猴子上使用

  24. 24

    为什么Linux中的“系统”功能不能运行此shellscript?

  25. 25

    为什么计数功能不能在Spark中使用mapvalues?

  26. 26

    为什么信号功能不能使用信号工作?

  27. 27

    减少功能不能处理空列表

  28. 28

    为什么我的链接列表删除功能不起作用?

  29. 29

    为什么此功能不能在即7,8(延迟和淡入)上起作用?

热门标签

归档