【问题标题】:Check if an array of substrings all exist in an array of strings检查子字符串数组是否都存在于字符串数组中
【发布时间】:2020-07-06 16:10:05
【问题描述】:

关于迭代和检查数组是否有任何缺失值,我有一个复杂的问题(对于我有限的 Python 知识)。

我有一个键字符串数组,我需要检查该数组是否包含另一个数组中的所有子字符串。如果没有,我需要输出缺少的内容。

例子:

array1 = ['key/value/one123904', 'key/value/two342389', 'key/value/three234093']
array2 = ['one', 'two', 'three', 'four']

我的理想输出是说array2 的所有元素都存在于array1 中,如果它们存在的话,或者在上面的示例中,输出No key for value: four

【问题讨论】:

    标签: python arrays loops iterator substring


    【解决方案1】:

    您可以通过遍历子字符串列表array2 来实现此目的,并测试array1 中的关键字符串的any 是否包含此子字符串,即:

    for string in array2:
        if not any(string in key_string for key_string in array1):
            print("No key for value: " + string)
            break                                                                   
    else:                                                                           
        print("All elements of array2 exist in array1")
    

    如果你不熟悉forelse子句,这只会在循环正常退出时执行,即如果使用break提前终止循环,则不会执行。

    如果您想记录所有不存在的子字符串:

    missing = [string for string in array2                                          
               if not any(string in ks for ks in array1)]                           
    if missing:                                                                     
        for string in missing:                                                      
            print("No key for value: " + string)                                    
    else:                                                                           
        print("All elements of array2 exist in array1")
    

    【讨论】:

      【解决方案2】:

      一行:

      print(
          "No key for value(s): {}".format(
              " ".join([k for k in array2 if not any(k in v for v in array1) ])
          )
      )
      

      或者,如果您想更正确地处理所有值都存在的情况

      no_match = [k for k in array2 if not any(k in v for v in array1) ]
      print(
          "No key for value(s): {}".format(" ".join(no_match))
          if no_match
          else "All keys have values"
      )
      

      【讨论】:

        【解决方案3】:
        array1 = ['key/value/one123904', 'key/value/two342389', 'key/value/three234093']
        array2 = ['one', 'two', 'three', 'four']
        
        
        def does_match_in_array_of_string(key: str, search_list : list) -> bool:
            for item in search_list:
                if key in item:
                    return True
            return False;
        
        
        match_failures = [key for key in array2 if not does_match_in_array_of_string(key, array1)]
        
        if len(match_failures):
            print(f'No key for values: {match_failures}')
        else:
            print('All keys have values')
        

        【讨论】:

        • 我很好奇是否有人能找到合理的方法来使用 filter()
        • 看你怎么定义合理
        • 我的快速尝试是粗鲁的,远非任何人类对合理的定义:)
        【解决方案4】:

        这是我为您的问题所做的方法,

        def missing(arr1, arr2):
            #arr1 is the array of strings to be searched
            #arr2 is the array of substrings
            notFound=""
            for i in arr2: # i = each element in array 2
                for j in arr1: # j = each element in array 1
                    if i in j: # if substring of i is in an element in j
                        break # moves onto next element in the array
                    elif j == arr1[-1]: # if not found in the string, checks if  on the last item in the array.
                        notFound = notFound+" "+i
            if notFound != "":
                print("No key for value:", notFound)
            else:
                print("all elements of array2 exist in array1")
        

        【讨论】:

          【解决方案5】:
          sum_array1 =""
          for string1 in array1:
              sum_array1 = sum_array1 + string1 + ","
          missing = [string2 for string2 in array2 if string2 not in sum_array1]
          if missing:                                                                     
              for string in missing:                                                      
                  print("No key for value: " + string)                                    
          else:                                                                           
              print("All elements of array2 exist in array1")
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-14
            • 2023-03-31
            • 2017-01-27
            • 1970-01-01
            • 1970-01-01
            • 2021-12-27
            相关资源
            最近更新 更多