Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.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_Indexing - Fatal编程技术网

如何在Python中比较两个列表中的值?

如何在Python中比较两个列表中的值?,python,list,indexing,Python,List,Indexing,我有两份清单: my_values = ['0,78', '0,40', '0,67'] my_list = [ ['Morocco', 'Meat', '190,00', '0,15'], ['Morocco', 'Meat', '189,90', '0,32'], ['Morocco', 'Meat', '189,38', '0,44'], ['Morocco', 'Meat', '188,94', '0,60'], ['Morocco', 'M

我有两份清单:

my_values = ['0,78', '0,40', '0,67']

my_list = [
    ['Morocco', 'Meat', '190,00', '0,15'], 
    ['Morocco', 'Meat', '189,90', '0,32'], 
    ['Morocco', 'Meat', '189,38', '0,44'],
    ['Morocco', 'Meat', '188,94', '0,60'],
    ['Morocco', 'Meat', '188,49', '0,78'],
    ['Morocco', 'Meat', '187,99', '0,101'],
    ['Spain', 'Meat', '190,76', '0,10'], 
    ['Spain', 'Meat', '190,16', '0,20'], 
    ['Spain', 'Meat', '189,56', '0,35'],
    ['Spain', 'Meat', '189,01', '0,40'],
    ['Spain', 'Meat', '188,13', '0,75'],
    ['Spain', 'Meat', '187,95', '0,78'],
    ['Italy', 'Meat', '190,20', '0,11'],
    ['Italy', 'Meat', '190,10', '0,31'], 
    ['Italy', 'Meat', '189,32', '0,45'],
    ['Italy', 'Meat', '188,61', '0,67'],
    ['Italy', 'Meat', '188,01', '0,72'],
    ['Italy', 'Meat', '187,36', '0,80'],
]
我有一个检查以下内容的代码:

  • 对于摩洛哥,它检查
    my_列表中的
    index[2]
    my_值==0,78
  • 对于西班牙,它检查
    my_列表中的
    index[2]
    my_值==0,40
  • 对于意大利,它检查
    索引[2]
    i
    nmyu列表
    索引[3]
    myu值==0,67
  • 现在我遇到了一个问题,正如您在
    my_values
    中看到的
    0,78
    在摩洛哥和西班牙存在,我只想让它检查摩洛哥

    这是我的代码:

    yet_another_list = [i[2] for i in my_list if i[3] in my_values]
    print(yet_another_list)
    
    这是我的输出:

    ['188,49', '189,01', '187,95', '188,61']
    
    这是我喜欢的输出:

    ['188,49', '189,01', '188,61']
    
    如您所见,我希望
    my_值的
    index[1]
    仅用于
    摩洛哥
    ,而
    index[2]
    用于
    西班牙
    等。。。请注意,在我的Office数据集中,我的列表中包含了更多的国家

    #添加。我甚至尝试了熊猫,但仍然收到了相同的输出。

    df=pd.DataFrame(my_list)
    df['Filter']=np.where([i in my_values for i in df[3]],"Yes","")
    my_out_list=list(df[2][df['Filter']=='Yes'])
    
    print(my_out_list)
    
    >> 
    ['188,49', '189,01', '187,95', '188,61']
    

    我建议使用字典,然后过滤数据集

    my_values = {'Morocco': '0,78', 'Spain': '0,40', 'Italy': '0,67'}
    
    my_list = [
        ['Morocco', 'Meat', '190,00', '0,15'], 
        ['Morocco', 'Meat', '189,90', '0,32'], 
        ['Morocco', 'Meat', '189,38', '0,44'],
        ['Morocco', 'Meat', '188,94', '0,60'],
        ['Morocco', 'Meat', '188,49', '0,78'],
        ['Morocco', 'Meat', '187,99', '0,101'],
        ['Spain', 'Meat', '190,76', '0,10'], 
        ['Spain', 'Meat', '190,16', '0,20'], 
        ['Spain', 'Meat', '189,56', '0,35'],
        ['Spain', 'Meat', '189,01', '0,40'],
        ['Spain', 'Meat', '188,13', '0,75'],
        ['Spain', 'Meat', '187,95', '0,78'],
        ['Italy', 'Meat', '190,20', '0,11'],
        ['Italy', 'Meat', '190,10', '0,31'], 
        ['Italy', 'Meat', '189,32', '0,45'],
        ['Italy', 'Meat', '188,61', '0,67'],
        ['Italy', 'Meat', '188,01', '0,72'],
        ['Italy', 'Meat', '187,36', '0,80'],
    ]
    
    
    print([e[2] for e in filter(lambda x: x[3] == my_values[x[0]], my_list)])
    
    >>> ['188,49', '189,01', '188,61']
    

    作为补充说明,如果您使用的是更大的数据集,那么查看这个包可能会有所帮助,它是一个用于数据分析的流行Python库

    我建议您使用字典,然后过滤数据集

    my_values = {'Morocco': '0,78', 'Spain': '0,40', 'Italy': '0,67'}
    
    my_list = [
        ['Morocco', 'Meat', '190,00', '0,15'], 
        ['Morocco', 'Meat', '189,90', '0,32'], 
        ['Morocco', 'Meat', '189,38', '0,44'],
        ['Morocco', 'Meat', '188,94', '0,60'],
        ['Morocco', 'Meat', '188,49', '0,78'],
        ['Morocco', 'Meat', '187,99', '0,101'],
        ['Spain', 'Meat', '190,76', '0,10'], 
        ['Spain', 'Meat', '190,16', '0,20'], 
        ['Spain', 'Meat', '189,56', '0,35'],
        ['Spain', 'Meat', '189,01', '0,40'],
        ['Spain', 'Meat', '188,13', '0,75'],
        ['Spain', 'Meat', '187,95', '0,78'],
        ['Italy', 'Meat', '190,20', '0,11'],
        ['Italy', 'Meat', '190,10', '0,31'], 
        ['Italy', 'Meat', '189,32', '0,45'],
        ['Italy', 'Meat', '188,61', '0,67'],
        ['Italy', 'Meat', '188,01', '0,72'],
        ['Italy', 'Meat', '187,36', '0,80'],
    ]
    
    
    print([e[2] for e in filter(lambda x: x[3] == my_values[x[0]], my_list)])
    
    >>> ['188,49', '189,01', '188,61']
    

    作为一个补充说明,如果您使用的是更大的数据集,那么查看包(一个用于数据分析的流行Python库)可能会有所帮助。如果我正确理解您的需求,您希望循环列表中的国家,同时循环其他列表中的索引

    previous=my_list[0][0]
    ind=0
    结果=[]
    对于my_列表中的项目:
    如果项目[0]!=以前的:
    ind+=1
    上一个=项目[0]
    如果项目[3]==my_值[ind]:
    结果。追加(项目[2])
    打印(结果)
    
    如果您的国家/地区多于
    my\u值中的值,这显然会抛出一个
    索引器


    也许更好的方法是将
    my_list
    转换为dict,其中键是国家名称,值是该国家的值。

    如果我正确理解您的要求,您希望循环列表中的国家,同时循环其他列表中的索引

    previous=my_list[0][0]
    ind=0
    结果=[]
    对于my_列表中的项目:
    如果项目[0]!=以前的:
    ind+=1
    上一个=项目[0]
    如果项目[3]==my_值[ind]:
    结果。追加(项目[2])
    打印(结果)
    
    如果您的国家/地区多于
    my\u值中的值,这显然会抛出一个
    索引器


    也许更好的方法是将
    my_list
    转换为dict,其中键是国家名称,值是该国家的值,不过。

    使用带迭代器的原始数据结构

    def get_values(my_list_, *my_values_):
        ''' Finds the desired result using my_list_ and my_values
            my_valuesis one or more list
        '''
        output = []
        # Find values for each list in my_values_
        for my_values__ in my_values_:
             # Create iterators 
            result = []
            my_values_iter = iter(my_values__) # iterator for current list of values
            my_list_iter = iter(my_list_)  # from beginning of my_list_
    
            v = next(my_values_iter, None)
            i = next(my_list_iter, None)
            while v and i:
                if v == i[3]:
                    # found match
                    result.append(i[2])
                    v = next(my_values_iter, None) # Next value to find in my_values
                    i = next(my_list_iter, None)   # Next value to check in my_list
                else:
                    # try next value from my_list
                    i = next(my_list_iter, None)   # Next value to check in my_list
            output.append(result)
            
         if len(output) == 1:
            return output[0]  # Only single list
        else:
            return tuple(x for x in output) # Output tuple of lists
        
    
    用法


    使用带有迭代器的原始数据结构

    def get_values(my_list_, *my_values_):
        ''' Finds the desired result using my_list_ and my_values
            my_valuesis one or more list
        '''
        output = []
        # Find values for each list in my_values_
        for my_values__ in my_values_:
             # Create iterators 
            result = []
            my_values_iter = iter(my_values__) # iterator for current list of values
            my_list_iter = iter(my_list_)  # from beginning of my_list_
    
            v = next(my_values_iter, None)
            i = next(my_list_iter, None)
            while v and i:
                if v == i[3]:
                    # found match
                    result.append(i[2])
                    v = next(my_values_iter, None) # Next value to find in my_values
                    i = next(my_list_iter, None)   # Next value to check in my_list
                else:
                    # try next value from my_list
                    i = next(my_list_iter, None)   # Next value to check in my_list
            output.append(result)
            
         if len(output) == 1:
            return output[0]  # Only single list
        else:
            return tuple(x for x in output) # Output tuple of lists
        
    
    用法



    您误用了一个值作为唯一标识符,而该值不是唯一标识符。当有人留下注释而不是答案时,通常意味着他们没有完整的解决方案。也许可以查看以更好地了解此网站的工作原理。切换到Pandas,但复制相同的错误显然无法解决问题,尽管它可能会扩展得相当大。您误用了一个值作为唯一标识符,而该值不是唯一标识符。当有人留下评论而不是答案时,这通常意味着他们没有一个完整的解决方案。也许可以通过查看来更好地了解该网站的工作原理。切换到Pandas,但复制同一个bug显然不能解决问题,尽管它可能会有很大的扩展。我理解你的答案,但它不能解决我更大的数据集。你知道如何用Pandas解决这个问题吗?为什么你认为这对更大的数据集不起作用?@tripleee,因为我需要手动修复
    我的_值
    。这并不是一个糟糕的答案。您当前的数据结构很麻烦,可能会带来额外的问题。好的,那么使用pandas并不能真正解决这个问题。如果
    my_list
    中的城市顺序与
    my_values
    中的值顺序相匹配,那么您可以通过一些额外的处理来利用它。我理解您的答案,但它无法解决我更大的数据集。你知道如何用Pandas解决这个问题吗?为什么你认为这对更大的数据集不起作用?@tripleee,因为我需要手动修复
    我的_值
    。这并不是一个糟糕的答案。您当前的数据结构很麻烦,可能会带来额外的问题。好的,那么使用pandas并不能真正解决这个问题。如果
    my_list
    中的城市顺序与
    my_values
    中的值顺序相匹配,则您可以通过一些额外的处理来利用该顺序。您的回答是索引超出范围。我甚至试过熊猫,但仍然收到相同的输出;我忘记更新先前的
    变量。您的回答是索引超出范围。我甚至试过熊猫,但仍然收到相同的输出;我忘了更新前一个变量。@DarryIG,这似乎是个不错的变量。但是不能再短一点吗?不过我还有一个补充。如果我有另一个名为
    my_values_2
    的额外列表,其中还有3个值,该怎么办。我可以复制粘贴代码,但我更喜欢一次完成…@TanGerCity——这意味着您需要我的值1和值2的结果列表。我的\u值\u 2是从一开始就检查我的\u列表,还是从我的\u值\u 1在我的\u列表中停止的位置继续检查?@DarryIG,它又从头开始。实际上,它也是一样的,只是
    my_values\u 2
    @TangerCity中的不同值--已更新以处理一个或多个值列表。@darryg但t