【问题标题】:Python: increment index range by 1Python:将索引范围增加 1
【发布时间】:2020-05-12 09:56:15
【问题描述】:

我有这个代码:

f = open('story.txt', 'r')
story = f.read()


a = 0
b = 2
active_words = story[a:b]

我试图在程序的稍后部分做到这一点,我可以将这个索引的范围增加 (+1),这样就不需要从故事中取出一个单词作为 active_words,而是需要 2,3, 4...等。理想情况下,这将能够发生在while循环的一部分内。

抱歉,我没有格式,这是我的第一篇文章。

我也刚刚开始学习 python,所以我可能忽略了一个非常简单的解决方案...我尝试定义一个函数,如 extend(active_words),但无济于事。

提前致谢!

【问题讨论】:

  • 这不清楚。您是否尝试生成看起来像story[0:2], story[0:3], story[0:4] ...story[0:2], story[2:5], story[5:9] ... 的连续切片?如果是前者,那就太简单了:for i in range(2,len(story)): active_words = story[:i](无需指定0
  • 您好,非常感谢您的回复!抱歉不清楚...理想情况下,我可以控制这两个参数,并且可以扩展切片的长度(例如,从 0:1 到 0:2),但也可以开始一个新的切片(例如,从 1:3 到 3:4)。是不是更清楚了?
  • 澄清您的问题。使用帖子下方的edit 按钮来执行此操作。更改ab 的值有什么问题?从您的设置看来,这一切都是必要的(尽管在您非常短的示例代码中没有解决从字符到 words 的跳转)。

标签: python loops indexing increment


【解决方案1】:

一个基本的嵌套 for 循环似乎正是您要寻找的:

n = len(story)
for k in range(2,n+1):
    for j in range(n-k+1):
        active_words = story[j:j+k]

外层循环控制切片的长度,内层循环实际生成切片。

请注意,这些只是字符串切片,其中将包含单词的片段。在循环之前,您可能需要 story = story.split() 之类的东西。

【讨论】:

  • 我刚刚在我的程序上下文中尝试了这个,它将“故事”拆分为故事中的单词列表。很可能我用错了,因为我对 Python 仍然不是很有信心。我不确定在堆栈溢出中发布是如何工作的,但是我是否可以在我的程序中发布所有代码以显示我的问题的上下文?那是正确的“堆栈礼仪”吗?啊哈无论如何都感谢您的帮助!
  • 如果您愿意,也许可以再问一个问题。改变问题以提出后续问题并不被认为是好的礼仪,因为它会使你的问题成为一个移动的目标。另一方面,如果您添加的内容澄清了原始问题,则对其进行编辑。我上面给出的代码适用于字符串或列表。如果story 是一个单词列表,那么它将从长度至少为 2 的列表中生成所有切片。循环本身不会分割任何内容。
  • 谢谢,我会试着向你描述我的程序是如何工作的。它是一个在(故事)中寻找字谜的程序。我在resources 中有一个名字列表,这些名字已经变成了字谜并隐藏在story 中。它的运作方式是我将列表中的名称和active_words 拆分为一组字母,然后在所有名称中搜索交叉点。然后编译一个名为matches 的名称列表,其中包含与active_words 字母匹配的名称。现在我需要增加active_words(并重复交叉测试),这就是问题所在。
  • 这需要一个后续问题,并且比该评论更清楚。您询问了如何遍历字符串中的切片,并且该问题已得到解答。开始谈论一个涉及多个列表和字符串的程序,其中一些是彼此的字谜。
  • 好的,谢谢。对于这个不清楚的问题,我深表歉意!
【解决方案2】:

你想把一个句子分成单词吗? 如果是这样,请尝试使用:

story = f.read()
words = story.split()
for word in words:
    print(word)

【讨论】:

  • 谢谢,但我已经设法在我的程序中做到了。非常感谢!
猜你喜欢
  • 2022-07-12
  • 2016-06-03
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-06
相关资源
最近更新 更多