【问题标题】:Getting indices of all the elements that contain given substring [duplicate]获取包含给定子字符串的所有元素的索引[重复]
【发布时间】:2020-05-26 08:28:50
【问题描述】:

我正在尝试获取与my_list 中的某个条件匹配的所有元素的索引。

my_list = ['This is chapter 1', 'chapter 2 is here', 'Baseball Sport', 'Football Sport', 'chapter 13']

我想获取my_list 中包含字符串'chapter' 的所有元素的索引。 我已经尝试过列表推导,但我还是新手,所以没有成功。

search = 'Chapter'

for k in range(len(my_list)):
    search_list = [i for i, search in enumerate(my_list)
                   if search.lower() in my_list[k]]

我可能在这里犯了一些无法识别的错误。如何获得我想要的索引结果?

search_list = [0, 1, 4]

【问题讨论】:

    标签: python list


    【解决方案1】:

    主要问题是您在列表理解中重新定义search,并且正在使用它的新定义。你想要的是这样的:

    my_list = ['This is chapter 1', 'chapter 2 is here', 'Baseball Sport', 'Football Sport', 'chapter 13']
    search = 'chapter'
    results = [i for i, item in enumerate(my_list) if search in item]
    

    旁注:

    1. 如果你有权自己定义search,那就没有意义了 将其定义为"Chapter" 并每次调用.lower()。 从一开始就将其定义为"chapter"。
    2. 列表理解替换显式for循环。在这种情况下,两者兼有是错误的。您只需在列表中循环一次。
    3. enumerate 用于避免索引 (my_list[k])。您在这里使用enumerate 是正确的;所以使用它。

    【讨论】:

    • 感谢您的详细解答。至于搜索,我在这里以它为例。我正在从网页中抓取数据,因此我以小写字母构建列表,并使用小写字母搜索来匹配结果。
    【解决方案2】:

    你可以这样做

    my_list = ['This is chapter 1', 'chapter 2 is here', 'Baseball Sport', 'Football Sport', 'chapter 13']
    
    search = "chapter"
    
    search_list = [index for index, val in enumerate(my_list) if search in val]
    

    这给出的输出为

    [0, 1, 4]
    

    这是您想要的输出恕我直言。希望对你有帮助:)

    【讨论】:

      【解决方案3】:

      你可以这样做:

      my_list = ['This is chapter 1', 'chapter 2 is here', 'Baseball Sport', 'Football Sport', 'chapter 13']
      
      search = 'Chapter'
      search_list = []
      for i, k in enumerate(my_list):
        if search.lower() in k:
          search_list.append(i)
      print(search_list)
      

      【讨论】:

        【解决方案4】:

        我会这样做:

        my_list = ['This is chapter 1', 'chapter 2 is here', 'Baseball Sport', 'Football Sport', 'chapter 13'] 
        
        search = 'Chapter'
        
        search_list = [i for i, str_to_search in enumerate(my_list) if search.lower() in str_to_search]
        
        

        【讨论】:

          【解决方案5】:

          是解决问题的最佳方法:):

          search_list = [i for i, str_to_search in enumerate(my_list) if 'chapter' in 
          str_to_search]
          

          【讨论】:

            猜你喜欢
            • 2015-12-31
            • 1970-01-01
            • 1970-01-01
            • 2016-09-08
            • 2020-08-05
            • 2020-09-24
            • 2019-01-12
            • 2012-10-30
            • 1970-01-01
            相关资源
            最近更新 更多