比较两个列表 - 如果一个列表中的项目存在于另一个列表中,请执行某些操作

时间:2016-06-29 15:52:35

标签: python regex for-loop

更新 我有两个国家名单: 一个来自https://www.countries-ofthe-world.com/world-currencies.html,另一个来自http://www.nationsonline.org/oneworld/country_code_list.htm。这些列表中的某些国家/地区名称不同。我需要将它们合并以获得每个国家/地区名称,ISO3和ISO-4217。要获得完整列表,我需要重命名一些国家/地区。我正在尝试使用常规来查找国家/地区,并使用第二个DataFrame中的值对其进行重命名。

我有两个(国家/地区)列表,格式如下: 我需要的名字

Country_ISO['Country_or_territory'].tail(10)
    Out[57]: 
    237           Russian Federation
    238                      Vanuatu
    239                    Venezuela
    240                     Viet Nam
    241           Virgin Islands, US
    242    Wallis and Futuna Islands
    243               Western Sahara
    244                        Yemen
    245                       Zambia
    246                     Zimbabwe
    Name: Country_or_territory, dtype: object

和不同的名称

NotIn.Country_or_territory.tail(10)
Out[61]: 
131                     Macau
132                 Macedonia
148          Pitcairn Islands
153    Svalbard and Jan Mayen
163                    Russia
172               South Korea
177                     Syria
178                    Taiwan
180                  Tanzania
193                   Vietnam
Name: Country_or_territory, dtype: object

我需要在第一个列表中找到项目( Country_ISO ['Country_or_territory']。tail(10)),这些项目对应于第二个列表中的项目( NotIn.Country_or_territory.tai​​l( 10))并对这些名称做一些事情(重命名)。

我正在尝试使用嵌套for循环:

for itemNotIn in NotIn.Country_or_territory.tail(10):
    for item in Country_ISO['Country_or_territory'].tail(10):   
        Tr = itemNotIn[:3] #This here because I need to compare by the first 3 characters)        
        t = re.sub(Tr+'\w+', '*****NOT_IN*****', item)
        print(t)

但是当我运行它时,我会重复len(NotIn.Country_or_territory.tai​​l(10))。

我找不到办法让它发挥作用。

理想情况下,我会有一个列表:

*****NOT_IN*****
Vanuatu
Venezuela
*****NOT_IN***** Nam
Virgin Islands, US
Wallis and Futuna Islands
Western Sahara
Yemen
Zambia
Zimbabwe

1 个答案:

答案 0 :(得分:1)

正如评论者所建议的那样,使用集合可以使用以下代码获得问题的后半部分(即列表之间的差异):

list1 = ['Russia','Vanuatu','Venezuela','Viet Nam','Virgin Islands, 'US',
'Wallis and Futuna Islands','Western Sahara','Yemen','Zambia','Zimbabwe']

list2 = ['Macau','Macedonia','Pitcairn Islands','Svalbard and Jan Mayen',
'Russia','South Korea','Syria','Taiwan','Tanzania','Vietnam']

temp_set1 = set(list1).difference(list2)
print("Not in list2", temp_set1)

temp_set2 = set(list2).difference(list1)
print("Note in list1", temp_set2)

现在,您问题的第一部分实际上建议您希望找到相似之处并更改相似项目。在这种情况下,你可以做

common = list(set(list1).intersection(list2))

In [18]: list(set(list1).intersection(list2))
Out[18]: ['Russia']

def fun(common):
     #do something with common

最后,如果您仍希望仅使用前三个字符进行比较,请执行以下操作:

set([x[:3] for x in list1]).difference([x[:3] for x in list2])

In [19]: set([x[:3] for x in list1]).difference([x[:3] for x in list2])
Out[19]: {'US', 'Van', 'Ven', 'Vir', 'Wal', 'Wes', 'Yem', 'Zam', 'Zim'}