将包含某个单词的数组的索引存储到Python

时间:2018-03-01 23:16:21

标签: python list

我有这些清单:

array = ['I love school', 'I hate school', 'I hate bananas', 'today is 
friday', 'worldcup is great']

#finalArray is initially an empty list
finalArray = []  

我想保存" array"的索引。其中包含" school"进入" finalArray"。意思是" finalArray"应该是这样的:

['I love school', 'I hate school']

我尝试了以下不能完成工作的代码:

if "school" in array:
    finalArray = array.index("school")

为什么不起作用?有更好的方法吗?

6 个答案:

答案 0 :(得分:1)

您需要遍历数组,查看目标字std::string是否在该数组元素中。然后将索引放入列表中。

school

输出:

final_array = [i for i in range(len(array)) if "school" in array[i]]

您的原始尝试没有这样做:[0, 1] 可以在句子中找到index的位置,而不是包含 {{1}的句子的位置在数组中。

使用更多Pythonic技术进行改进:

school

答案 1 :(得分:1)

您的解决方案无效,因为您正在检查整个单词' school'在您的示例数组中。为了实现你想要的目标,你必须遍历列表并检查每个元素是否包含' school':

array = ['I love school', 'I hate school', 'I hate bananas', 'today is friday', 'worldcup is great']
finalArray = []

for element in array:
    if 'school' in element.lower():
        finalArray.append(element)

请注意,我在每个已选中的元素中添加了一个lower(),以确保您的程序也会抓住“学校”字样。在输入列表中。

答案 2 :(得分:0)

您可以检查当前迭代元素中是否存在"school"

array = ['I love school', 'I hate school', 'I hate bananas', 'today is friday', 'worldcup is great']
new_array = [i for i in array if "school" in i]

输出:

['I love school', 'I hate school']

答案 3 :(得分:0)

enumerate是提取指数的一种Pythonic解决方案:

arr = ['I love school', 'I hate school', 'I hate bananas',
       'today is friday', 'worldcup is great']

res = [i for i, j in enumerate(arr) if 'school' in j]

# [0, 1]

如果你想要值,逻辑就更简单了:

res = [i for i in arr if 'school' in i]

# ['I love school', 'I hate school']

列表推导提供与通过for循环追加到列表相同的结果,除非它是高度优化的。

答案 4 :(得分:0)

  

为什么不起作用?

因为index(x)方法,根据官方Python 3文档:

  

返回最小的i,使得i是数组中第一次出现x的索引。

所以,如果你想要finalArray = ['I love school', 'I hate school'], 你不想要索引(整数),但你想要实际的项目(在这种情况下是一个字符串)。

  

有更好的方法吗?

您可以简单地遍历array的元素(字符串),如果字符串包含单词" school"您可以将其添加到finalArray

array = ['I love school', 'I hate school', 'I hate bananas', 'today is friday', 'worldcup is great']

finalArray = []

for element in array:  # for each element in the array
    if "school" in element:  # check if the word "school" appears in the "element" string variable
        finalArray.append(element)  # if yes, add the string to "finalArray" variable

注意:这不是Pythonic代码。 Delirious Lettuce's answer包含了一种Pythonic方法。

答案 5 :(得分:0)

我想知道没有人推出内置函数filter的解决方案:

>>> array = ['I love school', 'I hate school', 'I hate bananas', 'today is friday', 'worldcup is great']    
>>> list(filter(lambda el: 'school' in el, array))
['I love school', 'I hate school']