如何在不超出索引范围的情况下,在列表中的特定字符串前后提取字符串?

2024-04-16 05:02:21 发布

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

假设我有以下清单:

x = ['i like cats', 'i like dogs', 'i like both']

我想找到包含单词“dogs”的字符串,然后在它前后连接字符串,形成“我喜欢猫”的序列。我喜欢狗。两样我都喜欢。”我是这样做的:

for position in range(len(x)):
    if 'dogs' in x[position]:
        print x[position - 1] + ". " + x[position] + ". " + x[position + 1] + "."

当我查找一个位于列表末尾的字符串时,我遇到了问题,例如:

for position in range(len(x)):
    if 'both' in x[position]:
        print x[position - 1] + ". " + x[position] + ". " + x[position + 1] + "."

当我这样做时,我得到以下错误:

IndexError: list index out of range

最好的方法是什么?如果字符串位于列表的最末尾,它会忽略它后面的索引,以便在提供的示例中打印出“我喜欢狗”。我两者都喜欢“?此外,如果我要像这样查找包含单词“cats”的字符串:

 for position in range(len(x)):
        if 'cats' in x[position]:
            print x[position - 1] + ". " + x[position] + ". " + x[position + 1] + "."

它打印出“我两者都喜欢。我喜欢猫。我喜欢狗。“我想把它打印出来”我喜欢猫。我喜欢狗。”

我从网站中提取大量文本,将单个字符串转储到列表中,以便找到语言模式并将其写入文件,因此我需要能够忽略列表的开头和结尾。你知道吗


Tags: 字符串in列表forlenifpositionrange
3条回答

请尝试一下我的解决方案如下。它适用于所有情况。你知道吗

x = ['i like cats', 'i like dogs', 'i like both']

for position in range(len(x)):
    if 'cats' in x[position]:
        print ".".join([x[pos] for pos in range(position-1, position+2) if pos in range(0, len(x))]) + "."

使用列表切片。如果数组索引超出界限,它将在末尾自动截断它。你知道吗

x = ['i like cats', 'i like dogs', 'i like both']
for position in range(len(x)):
    if 'both' in x[position]:
        print ('.'.join([ele for ele in x[0:2]]) if position==0 else '.'.join([ele for ele in x[position-1:position+2]]))

检查位置是否等于len(x)。如果是的话

print x[position - 1] + ". " + x[position] + "."

否则按正常方式打印。你知道吗

相关问题 更多 >