我是python编程的新手,我真的需要帮助比较列表中的值。
我有两个清单(饮料,食物)。我没有在两个清单之间进行比较。我想要做的是比较列表中的所有值本身。
所以,我必须首先使用for循环和if-else语句比较饮料列表中的所有值。如果饮料中有匹配,我会为食物清单做另一个循环,并使用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'依此类推。所以如果列表中有重复的值/项,我必须给出一条错误消息。
答案 0 :(得分:0)
#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 ==饮料', drink是一个列表对象,我是一个字符串对象。 因为我和饮料不相同,(它们是具有不同值的不同对象) if语句的计算结果为False,和 执行else语句,打印成功。
迭代2
i = 'coke'
if i == drinks
同样,您正在评估字符串对象'焦炭'与列表对象饮料, 这是假的。同样的条件适用于所有条件。
您需要做的是更改代码以使用索引
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中。要查看该项目是否出现在两个列表中,而不管订单是否使用'
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')
希望有所帮助。
修改
for x in food:
while food.count(x) > 1: #breaks loops when only occurrence left.
print("There are", food.count(x), 'occurrence of', x, 'in food')
food.pop(x)
print("deleted one occurrence")
此循环测试循环中的每个项目多次出现,并删除除一个之外的所有项目。
替代清洁方法。 - 使用集合,因为它按定义删除重复项。
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
答案 1 :(得分:0)
如果您想检查食物清单中是否存在pizza
值,您只需要这样做:
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
如果您只想删除列表中的重复值,可以使用示例代码:
print(list(set(food)))
输出结果为:
['pizza', 'nugget', 'chickenwing', 'fries']
答案 2 :(得分:0)
打印成功和失败,并删除重复...
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)
答案 3 :(得分:0)
您可以使用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
if len(set(food)) != len(food):
print('fail: duplicate entry in food')
success = False
if len(set(drinks)) != len(drinks):
print('fail: duplicate entry in drinks')
success = False
两个列表中的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')