Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在数组中插入缺少的元素_Python_Arrays_Tuples_Missing Data - Fatal编程技术网

Python在数组中插入缺少的元素

Python在数组中插入缺少的元素,python,arrays,tuples,missing-data,Python,Arrays,Tuples,Missing Data,我有一个以下格式的数组: [(u'iapsetting', 0), (u'iap-mms',0)] 数组必须仅包含此类型的元组: (u'mmssetting', 0) or (u'iapsetting', 0) or (u'iap-mms', 0) 我的第一个数组显然缺少(u'mmsseting',0),但它可能缺少/现有元组的许多不同组合 我正在努力寻找一种方法来添加正确的缺失元组。数组必须始终仅包含3个元组 到目前为止,我已经做到了这一点,但没有达到预期效果: for type

我有一个以下格式的数组:

[(u'iapsetting', 0), (u'iap-mms',0)]
数组必须仅包含此类型的元组:

(u'mmssetting', 0) or (u'iapsetting', 0) or (u'iap-mms', 0)
我的第一个数组显然缺少(u'mmsseting',0),但它可能缺少/现有元组的许多不同组合

我正在努力寻找一种方法来添加正确的缺失元组。数组必须始终仅包含3个元组

到目前为止,我已经做到了这一点,但没有达到预期效果:

    for type in setup: #setup is the array containing 1,2 or 3 tuples

       iap_found = False
       mms_found = False
       iap_mms_found = False

       if type[0]=='iapsetting':
              iap_found = True

       elif type[0]=='mmssetting':
              mms_found = True
       elif type[0]== 'iap-mms':
              iap_mms_found = True
       #Add missing settings

       if(iap_found==False):
          print("MISSING IAP",setup)
          setup.append((u'iapsetting',0))

       elif(mms_found==False):
          print("MISSING MMS",setup)
          setup.append((u'mmssetting',0))
       elif(iap_mms_found==False):
          print("MISSING IAP-MMS",setup)
          setup.append((u'iap-mms',0))
任何帮助都将不胜感激,因为可能有更好的方法。多谢各位


Sara

而不是使用
if
<代码>elif
elif
您应该使用

if not iap_found:
          print("MISSING IAP",setup)
          setup.append((u'iapsetting',0))
if not mms_found:
          print("MISSING MMS",setup)
          setup.append((u'mmssetting',0))
if not iap_mms_found==False:
          print("MISSING IAP-MMS",setup) 
          setup.append((u'iap-mms',0))
如果
的问题
elif
表示只执行一个分支


对于与
if
不同(在本例中也更好)的其他解决方案,请参见其他答案,而不是使用
if
<代码>elif
elif
您应该使用

if not iap_found:
          print("MISSING IAP",setup)
          setup.append((u'iapsetting',0))
if not mms_found:
          print("MISSING MMS",setup)
          setup.append((u'mmssetting',0))
if not iap_mms_found==False:
          print("MISSING IAP-MMS",setup) 
          setup.append((u'iap-mms',0))
如果
的问题
elif
表示只执行一个分支

对于与
不同(在本例中也更好)的其他解决方案,如果
,请参阅其他答案

尝试以下方法:

existing = set(x[0] for x in setup)
for expected in ('iapsetting', 'mmssetting', 'iap-mms'):
    if expected not in existing:
        setup.append((expected, 0))
试试这个:

existing = set(x[0] for x in setup)
for expected in ('iapsetting', 'mmssetting', 'iap-mms'):
    if expected not in existing:
        setup.append((expected, 0))

我认为集合最清楚地表达了这一逻辑。使用集合理解来提取字符串

 REQUIRED_VALUES = {"mmssetting", "iapsetting", "iap-mms"}
 input_tuple_list = [(u'mmssetting', 1), (u'iap-mms', 3)]

 # set comprehension paired with set difference -- results in {"iapsetting"}
 missing_values = REQUIRED_VALUES - {val for val, count in input_tuple_list}

 # results in [(u'mmssetting', 1), (u'iap-mms', 3), (u'iapsetting', 3)]
 input_tuple_list.extend((val, 0) for val in missing_values)

我认为集合最清楚地表达了这一逻辑。使用集合理解来提取字符串

 REQUIRED_VALUES = {"mmssetting", "iapsetting", "iap-mms"}
 input_tuple_list = [(u'mmssetting', 1), (u'iap-mms', 3)]

 # set comprehension paired with set difference -- results in {"iapsetting"}
 missing_values = REQUIRED_VALUES - {val for val, count in input_tuple_list}

 # results in [(u'mmssetting', 1), (u'iap-mms', 3), (u'iapsetting', 3)]
 input_tuple_list.extend((val, 0) for val in missing_values)

你做错的主要是两件事:

  • 您初始化了循环中的标志
  • 在完成整个阵列的循环之前,您就开始添加缺少的设置

    # Initialize flags before entering loop:
    iap_found = False
    mms_found = False
    iap_mms_found = False
    
    for type in setup: #setup is the array containing 1,2 or 3 tuples
       if type[0]=='iapsetting':
           iap_found = True
       elif type[0]=='mmssetting':
           mms_found = True
       elif type[0]== 'iap-mms':
           iap_mms_found = True
    
    #Add missing settings after looping through the whole array: 
    
    if(iap_found==False):
       print("MISSING IAP",setup)
       setup.append((u'iapsetting',0))
    
    if(mms_found==False):
       print("MISSING MMS",setup)
       setup.append((u'mmssetting',0))
    if(iap_mms_found==False):
       print("MISSING IAP-MMS",setup)
       setup.append((u'iap-mms',0))
    

    • 你做错的主要是两件事:

      • 您初始化了循环中的标志
      • 在完成整个阵列的循环之前,您就开始添加缺少的设置

        # Initialize flags before entering loop:
        iap_found = False
        mms_found = False
        iap_mms_found = False
        
        for type in setup: #setup is the array containing 1,2 or 3 tuples
           if type[0]=='iapsetting':
               iap_found = True
           elif type[0]=='mmssetting':
               mms_found = True
           elif type[0]== 'iap-mms':
               iap_mms_found = True
        
        #Add missing settings after looping through the whole array: 
        
        if(iap_found==False):
           print("MISSING IAP",setup)
           setup.append((u'iapsetting',0))
        
        if(mms_found==False):
           print("MISSING MMS",setup)
           setup.append((u'mmssetting',0))
        if(iap_mms_found==False):
           print("MISSING IAP-MMS",setup)
           setup.append((u'iap-mms',0))
        

      什么是不按预期工作?你应该把所有的<代码> ELIF <代码> s改为<代码> < < /C> > s,否则它只检查1个缺少的元素,但是如果2个或3个丢失了呢?它特别适合存储名称-值对。它使查找条目更直接。什么是不按预期工作?您应该将所有的<代码> ELIF <代码> s改为<代码> < < /代码> s,否则它只检查1个缺少的元素,但是如果2个或3个丢失了呢?您应该真正考虑使用<代码> DICT<代码>。它特别适合存储名称-值对。这使得查找条目更加直接。假设元组的整数元素不总是零可能是安全的。因此,元组集不起作用。是的,整数并不总是0:),但谢谢!)@user4554133我认为集合是处理此问题的最佳方式。请查看更新。看起来不错。我会放弃原来的代码,只使用新的东西。(也无需将其标记为“更新”。该网站的wiki功能会解决这一问题。)假设元组的整数元素并不总是零,这可能是安全的。因此,元组集不起作用。是的,整数并不总是0:),但谢谢!)@user4554133我认为集合是处理此问题的最佳方式。请查看更新。看起来不错。我会放弃原来的代码,只使用新的东西。(也无需将其标记为“更新”。该网站的wiki功能会解决这一问题。)谢谢SiggiSv!这很有效!你有我送的蛋糕;P(virtualcake)谢谢你,SiggiSv!这很有效!你有我送的蛋糕;P(虚拟制作)