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

Python 无法迭代列表并比较字符串

Python 无法迭代列表并比较字符串,python,list,Python,List,我是python编程新手,我真的需要帮助比较列表中的值 我有两个清单(饮料、食物)。我不会对两个清单进行比较。我想做的是自己比较列表中的所有值 因此,我必须首先使用for循环和if-else语句比较饮料列表中的所有值。如果饮料中有匹配项,我将对食物列表执行另一个for循环,并使用If-else语句比较食物列表中的值 以下是我的代码: drinks = [] food = [] drinks.append("lemontea") drinks.append("coke") drinks.appe

我是python编程新手,我真的需要帮助比较列表中的值

我有两个清单(饮料、食物)。我不会对两个清单进行比较。我想做的是自己比较列表中的所有值

因此,我必须首先使用for循环和if-else语句比较饮料列表中的所有值。如果饮料中有匹配项,我将对食物列表执行另一个for循环,并使用If-else语句比较食物列表中的值

以下是我的代码:

drinks = []
food = []

drinks.append("lemontea")
drinks.append("coke")
drinks.append("sprite")
drinks.append("orangejuice")
drinks.append("fantagrape")

food.append("nugget")
food.append("pizza")
food.append("chickenwing")
food.append("fries")
food.append("pizza")

for i in drinks:
    if i == drinks:
        for j in food:
            if j == food:
                print("fail")
    else:
         print("success") 
我的问题是,我应该得到一个“失败”的输出,因为我在食物列表中有相同的项目,那就是比萨饼。另外,我不知道为什么我会得到5个成功输出,而我只希望得到1个“失败”或“成功”输出

这是我得到的输出:

success
success
success
success
success
如果能得到任何帮助,我将不胜感激。多谢各位

更新: 谢谢你的回答,但是,人们似乎对我的问题感到困惑,因此我提供了更多的信息

我必须比较列表中的每个项目的原因是,这些项目是随机生成的,并且是字符串类型,然后将其附加到列表中。例如,生成的第一个项目是“00100ABC”,依此类推。因此,如果列表中有重复的值/项,我必须给出一条错误消息

#So you have
#drinks = ['lemontea', 'coke', 'sprite', 'orangejuice', 'fantagrape']
#food = ['nugget', 'pizza', 'chickenwing', 'fries', 'pizza']

for i in drinks:
    if i == drinks:
        for j in food:
            if j == food:
                print("fail")
    else:
         print("success")
迭代1

i = 'lemontea'
if i == drinks:
这里您正在评估'i==饮料', 其中,饮料是一个列表对象,而我是一个字符串对象。 由于i和饮料不相等,(它们是具有不同值的不同对象) if语句的计算结果为False,并且 执行else语句,该语句打印成功

迭代2

i = 'coke' 
if i == drinks
同样,您正在使用list对象计算字符串对象“coke”, 这是错误的。同样的条件适用于所有条件

您需要做的是更改代码以使用索引

eg. 
drinks[0] = 'lemontea'
drinks[1] = 'coke'
drinks[2] = 'sprite'
ect...
food[0] = 'nugget'
food[1] = 'pizza'
food[2] = 'chickenwing'
要比较相同位置的等效性,请使用索引

for i in range(0, len(drinks)):
    if drinks[i] == food[i]:            #compare index for index
        print('Matching index')
    else:
        print('Index does not match')
现在,如果索引中的项目在两个列表中都没有排序,这将不起作用,例如,金块可能不在两个列表的索引2中。要查看项目是否出现在两个列表中,而不考虑订单,请使用“in”

for item in food:    #eg item 0 = 'lemontea'
    if item in food and item in drinks:
        print(item, 'is in both lists')
    else:
        print(item, 'does not occur in both lists')
希望有帮助


编辑

此循环测试循环中的每个项目是否出现多个事件,并删除除一个以外的所有项目

替代清洁方法-按定义删除重复项时使用集合

unique_in_food = list(set(food))   #sets remove all duplicates by definition

now if you want unique items across multiples lists

unique_in_both = list( (set(food) | set(drinks) )
# set(a) | set(b)    finds the union between two sets

如果要检查食物列表中是否存在
比萨饼
值,只需执行以下操作:

def insertValue2List(list, value):
    if value not in list:
        list.append(value)
    else:
        print("fail")

drinks = []
food = []

insertValue2List(food, "nugget")
insertValue2List(food, "pizza")
insertValue2List(food, "chickenwing")
insertValue2List(food, "fries")
insertValue2List(food, "pizza")
输出为:

fail
['pizza', 'nugget', 'chickenwing', 'fries']
如果您只想删除列表中的重复值,可以使用示例代码:

print(list(set(food)))
输出为:

fail
['pizza', 'nugget', 'chickenwing', 'fries']

这将打印成功和失败,并删除重复项

drinks = []
food = []

food.append("nugget")
food.append("pizza")
food.append("chickenwing")
food.append("fries")
food.append("pizza")    

# let's add some duplicates…
drinks.append("lemontea")
drinks.append("fantagrape")
drinks.append("fantagrape")
drinks.append("coke")
drinks.append("orangejuice")
drinks.append("sprite")
drinks.append("fantagrape")
drinks.append("lemontea")
drinks.append("fantagrape")
drinks.append("sprite")
drinks.append("sprite")
drinks.append("orangejuice")
drinks.append("orangejuice")
drinks.append("coke")
drinks.append("coke")

food.append("chickenwing")
food.append("nugget")
food.append("pizza")
food.append("fries")
food.append("chickenwing")
food.append("nugget")
food.append("fries")
food.append("pizza")    

for drink in drinks:
  occurences = [index for index, value in enumerate(drinks) if value == drink]
  if len(occurences) > 1:  # if duplicates occur
    print('fail: {}'.format(drink))
    occurences.pop()  # keep one occurence
    [drinks.remove(drink) for o in occurences]  # remove the rest
  else:
    print('success: {}'.format(drink))

for meal in food:
  occurences = [index for index, value in enumerate(food) if value == meal]
  if len(occurences) > 1:  # if duplicates occur
    print('fail: {}'.format(meal))
    occurences.pop()  # keep one occurence
    [food.remove(meal) for o in occurences]  # remove the rest
  else:
    print('success: {}'.format(meal))

print(drinks)
print(food)

可以使用set检查唯一性和相交

drinks = []
food = []

drinks.append("lemontea")
drinks.append("coke")
drinks.append("sprite")
drinks.append("orangejuice")
drinks.append("fantagrape")

food.append("nugget")
food.append("pizza")
food.append("chickenwing")
food.append("fries")
food.append("pizza")

success = True
独特的 在两个列表中 成功!
有一件事你肯定错了,那就是你的情况:
如果i==饮料:
不正确。您正在对照列表检查饮料的价值。你最终会将一个字符串与一个列表进行比较,以获得相等的结果,并且肯定会一直使用else的情况。
如果i==drinks
就像是说如果每个字母都是整个字母表。此外,我也不会在你的逻辑中建立连接,说明为什么你必须有一个这样的嵌套列表。另外,您正试图通过循环逻辑实现什么。这对我来说没什么意义。@idjaw更改了列表中的值和对象,因为不允许我发布实际的项目。但无论如何,我必须先做一个for循环并比较饮料列表,如果有匹配项,我将在下一步对食物列表做同样的事情。@ShammelLee所以我尝试使用if i==饮料[i],但我得到一个错误,说“列表索引必须是整数,而不是str”嗨,谢谢你的回复。然而,你们的解释似乎是把食物和饮料清单一起比较。我不想把饮料单和食物单做比较。我想做的是先比较饮料单,然后再比较食物单。你为什么要把食物单和饮料单进行比较?你能举个例子说明你会如何使用它吗?我不允许发布实际的项目,但我可以告诉你,项目是随机生成的,并附加到列表中。但我必须确保项目不一样。因此,我必须比较列表中的每一项,如果有重复项,我必须给出一条错误消息。我仍然不完全理解您的意思,我想这些工具可能会有所帮助。count(),用于计算列表中某个项目的出现次数。或者使用集合来跟踪唯一的项。@DanielWinser所以实际的问题是您想检查重复项。您好,谢谢您的回复。这是否检查其他值,例如熔核。chickenwing、fries以及pizza值?元素
set()
必须唯一,因此如果重复列表元素将直接删除。谢谢,如果我想在食物列表中添加另一个for循环,该怎么办?@DanielWinser是饮料循环的食物循环部分,还是食物循环它自己的独立循环?它在一个独立的循环中loop@DanielWinser实际上是一样的,只是改变了变量名。请参阅更新的答案。
if set(food) & set(drinks):  # if the intersection of both sets is not empty
    print('fail: entry in both food and drinks')
    success = False
if success:
    print('success')