我正在尝试将list
值与tuples
列表进行比较。例如:
list = [1.0, 2.0]
list_of_tuples = [(3, 1.0, 'a'), (4, 2.0, 'b'), (5, 3.0, 'c')]
理想情况下,我要做的是获取元组列表并检查该列表中的所有值是否都存在于另一个中。在示例列表的情况下,我提供的1.0和2.0以上但不是3.0。另一个问题是,当理解发生时,元组列表中的值的位置将是未知的(在我上面提供的示例中不是这种情况)所以我实际上不确定它是否是可以做我想做的事。
对此的任何帮助都将受到赞赏,或者替代解决方案也会有所帮助。
答案 0 :(得分:1)
如果元组中只有一个值必须在list
中,那么这应该为您提供无效的元组列表。
filter(lambda values: not any(value in list for value in values), list_of_tuples)
否则,如果所有值必须在列表中
filter(lambda values: not all(value in list for value in values), list_of_tuples)
答案 1 :(得分:0)
flt=[]
for tup in list_of_tuples:
flt.extend(tup)
for val in lst:
if val in flt:
print val
else:
print 'failed'
此外,永远不要通过内置名称调用var。称之为lst
,而不是list
答案 2 :(得分:0)
这里是一个递归搜索算法,它将返回一个索引列表,您可以在该索引列表中恢复找到的值(地址从右向左读取。可能有一种方法可以将它们添加到另一个方向) :
def recursive_search(searchable, value):
address = []
if _recursive_search(searchable, value, address):
return address
else:
raise Exception("Value not found!")
def _recursive_search(searchable, value, address):
if hasattr(searchable, '__iter__'): # check if searchable is a list or a tuple
for i in range(len(searchable)):
if _recursive_search(searchable[i], value, address):
address.append(i)
return True
else:
return False
else:
if searchable == value:
return True
#recursive_search([[[1,2],[3,4],[5,6]],[[7,8],[9,10],[11,12]]], 11) -> [0,2,1]
编辑如果要将其应用于值列表,可以使用map
或其他类似值。 map(lambda x: recursive_search(list_of_tuples, x), list)
编辑如果您也想搜索其他方向(您的问题似乎也是如此),您可以将递归地图功能与recursive_search
...
def recursive_map(some_func, thing_to_map_over):
some_func = some_func or recursive_map
if hasattr(thing_to_map_over, '__iter__'):
return map(lambda x: recursive_map(some_func, x), thing_to_map_over)
else:
return some_func(thing_to_map_over)
因此,recursive_map(lambda x: recursive_search(list, x), list_of_tuples)
会告诉您list_of_tuples
中的所有内容是否在列表中,以及这些内容的位置。