Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.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_List_Comparison_Elements - Fatal编程技术网

比较Python中常用项的动态列表数(长度不相等)

比较Python中常用项的动态列表数(长度不相等),python,list,comparison,elements,Python,List,Comparison,Elements,我试图比较由用户输入和模式匹配动态生成的不同数量和长度的列表。我还没有包括所有匹配的代码,但是你应该知道我在做什么 根据另一篇堆栈溢出帖子的建议,我使用了“列表列表”。我使用了用户输入的查询数量来命名列表并访问它们 在课程结束时,我想在列表之间做一些比较,但我不知道该怎么做。首先,我只想比较列表元素并在所有列表中找到匹配的元素,但是我也希望在以后执行其他列表比较。一旦我跳出了“for query in dom_querys”循环,我就不知道如何访问单个列表 我被卡住了,非常感谢你的帮助 谢谢 #

我试图比较由用户输入和模式匹配动态生成的不同数量和长度的列表。我还没有包括所有匹配的代码,但是你应该知道我在做什么

根据另一篇堆栈溢出帖子的建议,我使用了“列表列表”。我使用了用户输入的查询数量来命名列表并访问它们

在课程结束时,我想在列表之间做一些比较,但我不知道该怎么做。首先,我只想比较列表元素并在所有列表中找到匹配的元素,但是我也希望在以后执行其他列表比较。一旦我跳出了“for query in dom_querys”循环,我就不知道如何访问单个列表

我被卡住了,非常感谢你的帮助

谢谢

# set dom_count and initialise query_list
dom_count = 0
dom_queries = [] 
# get the number of query domains
domain_number = raw_input('How many domains do you want to find intersects for? ')
# Grab query ID's
while dom_count < int(domain_number):
 dom_count += 1
 query_domain  = raw_input('domain ID query ' + str(dom_count) + ': ')
 dom_queries.append(query_domain)

# initialise lists for query_matches
list_of_lists = []
for i in range(len(dom_queries)):
 list_of_lists.append( [] )
list_pos = 0

# do some matching here for each dom_query, incrementing list position for each query 
# and put matches into the list
for query in dom_queries:
 some_match = re.search(r'XYZ',some_line)
 list_of_lists[int(list_pos)].append(some_match.group())
 list_pos += 1

# HERE IS WHERE I'M STUCK!!!
# I would like to compare all list's generated and find list entries 
# that exist in each list (can be any number of lists with different lengths).

for i in range (len(dom_queries)):
 common = list(set(list_of_lists[i] & .... \/^.^\/  ??
#设置dom计数并初始化查询列表
dom_计数=0
dom_查询=[]
#获取查询域的数目
domain_number=raw_input('您希望为多少个域查找相交?')
#抓取查询ID的
当dom\u count
从所有列表中,您可以创建一个集合,该集合将包含所有列表中的所有项目,并使用函数intersection() 这从Python2.6开始就可以使用,您必须先将列表转换为集合


首先,只是一个简化。您可以使用列表理解来创建空列表(稍微有点Pythonic)。另外,让我们将其设置为集合列表,而不是列表列表列表

list_of_sets = [set() for i in range(domain_number)]
然后我们可以这样做:

common_set = set()
for i, s in enumerate(list_of_sets):
    if i == domain_number - 1:
        break
    common_set = common_set.update(s.intersection(list_of_sets[i+1])

因此,从一个空集合开始,然后对于列表中的每个集合,找到它与列表中下一个集合的交集(交集:这两个集合之间的所有共享项)。然后使用
update
将交叉点集合并到公共元素集中。稍后,如果要手动将项目添加到公共元素集中,可以使用
add
方法。

这可能不是最有效的方法,但我只需循环每个列表中的所有项目,并检查每个项目是否在所有项目中e其他列表。但正如所说的,必须有更多的python方法来实现这一点。非常感谢您的帮助!!我理解这种方法,但我仍在努力弄清楚这到底是如何工作的,以及如何在每个集合中动态添加元素。一旦有了匹配,我想添加到当前的工作集合中(由list_pos定义,它为每个dom_查询递增)。当我有一个正则表达式匹配时,我只是不确定如何附加/更新到正确的集合/列表??我正在尝试>>集合(int(list_pos)).update(match.group())但是获取TypeError:“int”对象不可编辑…我如何在语法上引用第一个集合,例如将数据放入其中???您可以使用
add()
方法向集合中添加单个项。
update()
用于组合两个集合。我将用解释更新答案。感谢您花时间为我尝试并简化事情!!!我陷入困境的一点是,我不确定如何为循环中的每个dom_查询向集合添加正则表达式匹配项。如何在语法上为每个dom_查询将匹配正则表达式数据发送到正确的集合?在我的原始问题是“列表[int(列表位置)].append(some_match.group())”,而列表位置允许我定位正确的列表。设置[int(列表位置)]。添加(some_match.group())不起作用。我一直想问的关键问题是,当我想把匹配放在某个地方时,如何定义每个目标集……很抱歉,这篇文章:/和thx!
list\u of_set
仍然是一个列表,所以
list\u of_set[list\u pos]。添加(some\u match.group())
应该很好…?对了!!:)再次感谢您的帮助…和耐心!!