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