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
<代码>elifelif
您应该使用
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(虚拟制作)