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

时间:2017-06-06 02:32:14

标签: python list

我是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'依此类推。所以如果列表中有重复的值/项,我必须给出一条错误消息。

4 个答案:

答案 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')