簡體   English   中英

比較Python中常見條目的列表的動態數量(非等長)

[英]comparing dynamic number of lists (non-equal length) for common entries in Python

我正在嘗試比較由用戶輸入和模式匹配動態生成的不同數量和長度的列表。 我沒有包含所有匹配的代碼,但是您應該了解我正在嘗試做的事情。

根據另一個Stack Overflow帖子的建議,我使用了“列表列表”。 我已經使用了用戶輸入的查詢數量來命名列表並訪問它們。

在程序結束時,我想在列表之間做一些比較,但是我不知道該怎么做。 首先,我只想比較列表元素並找到所有列表中匹配的元素,但是我也想稍后再進行其他列表比較。 一旦我不在dom_queries中的“ for查詢”循環中,就無法弄清楚如何訪問單個列表。

我超級困住,真的會得到一些幫助!!

謝謝,

# 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] & .... \/^.^\/  ??

您可以從所有列表中創建一個集合,其中將包含所有帶有函數intersection()的列表中存在的所有項。此函數從Python 2.6開始運行,您必須首先將列表轉換為集合。

http://docs.python.org/2/library/stdtypes.html#set.intersection

首先,只是一個簡化。 您可以使用列表推導來創建列表的空列表(只是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方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM