Python附加未按预期工作

2024-10-02 12:32:08 发布

您现在位置:Python中文网/ 问答频道 /正文

x_list = [0, 0]
y_list = [0, 1]
def coordinates(condition_x, condition_y):
    zipped = zip(x_list, y_list)
    condition_coord = condition_x,condition_y
    for a,b in zipped:
        print a,b
        coord = a,b
        if condition_coord != coord:
            x_list.append(condition_x)
            y_list.append(condition_y)
        else:
            print "Already a room there"

print x_list
print y_list    
coordinates(0,1)
print x_list
print y_list

对于这段代码,我要完成的是:有两个列表x_listy_list,我正在检查是否有任何坐标对已经存在。x_listy_list的第一个索引是第一个坐标,二者的第二个索引是第二个坐标,以此类推

coordinates函数中,我想查看两个列表,并测试该坐标是否已经存在,如果不存在,则将其附加到两个列表中,创建另一个坐标对。你知道吗

我得到的错误是,当它被测试时,它显示“已经有一个房间了”,并将坐标附加到列表中,即使它们已经在那里了。你知道吗

示例:

coordindates(0,1)
coordindates(0,2)

第一次调用应该返回“Already a room there”,第二次调用应该将0附加到X\u list,将2附加到y\u list。你知道吗


Tags: 列表fordefzipconditionlistroomthere
3条回答

你应该使用更好的测试条件。同样地,当至少一个测试通过时,您的条件会添加一个新的坐标,相反,当所有坐标通过测试时,它会添加。您应该使用all

x_list = [0, 0]
y_list = [0, 1]

def coordinates(condition_x, condition_y):
    zipped = zip(x_list, y_list)
    condition_coord = condition_x,condition_y
    #if all((a, b) != condition_coord for a, b in zipped):
    if condition_coord not in zipped:
        x_list.append(condition_x)
        y_list.append(condition_y)
    else:
        print "Already a room there"

你的代码不能工作,因为你做的检查和添加每对夫妇。所以如果你有N个坐标,你会把新的坐标加N次,如果已经存在的话,加N-1。你必须这样做:

def coordinates(condition_x, condition_y):
    zipped = zip(x_list, y_list)
    condition_coord = condition_x,condition_y
    in_lists = False

    for a,b in zipped:
        print a,b
        coord = a,b
        if condition_coord = coord:
            in_lists = True
            break

    if not in_lists:
        x_list.append(condition_x)
        y_list.append(condition_y)

或者更好,只需使用^{}个元组:

>>> coordinates = {(5, 7), (9, 0), (0, 1)}
>>> coordinates
set([(0, 1), (9, 0), (5, 7)])
>>> coordinates.add((5, 7))
>>> coordinates
set([(0, 1), (9, 0), (5, 7)])
>>> coordinates.add((4, 4))
>>> coordinates
set([(0, 1), (9, 0), (5, 7), (4, 4)])

问题是您只是在检查一个坐标是否与您的condition coord不匹配。您仍然可以搜索,但更好的方法是利用Python的in

x_list = [0, 0]
y_list = [0, 1]

def coordinates(condition_x, condition_y):
    if (condition_x, condition_y) not in zip(x_list, y_list):
        x_list.append(condition_x)
        y_list.append(condition_y)
    else:
        print 'Already a room there'

print x_list
print y_list    
coordinates(0, 1)
print x_list
print y_list

更好的方法是使用set。你知道吗

相关问题 更多 >

    热门问题