为什么在函数中只复制一个参数而不是6?

时间:2015-12-12 20:14:24

标签: python python-2.7

我是编程的新手,在下面的函数中,我想从一个列表中添加一个参数,然后在另一个列表中添加一个参数(如果它们的编号相同)。相反,我得到一个输出。我不知道为什么。

所需的输出是: ll = [aa,ab,ba,bb,ca,cb]

class TestClass:
    def __init__(self, n, s):
        self.n = n
        self.s = s

aa = TestClass("aa", 2)
ba = TestClass("ba", 2)
ca = TestClass("ca", 2)

ab = TestClass("ab", 2)
bb = TestClass("bb", 2)
cb = TestClass("cb", 2)

ls1 = [aa, ba, ca]
ls2 = [ab, bb, cb]
ml = []

def make_last_list(list1, list2, merged_list):
    a = len(list1) + len(list2)
    recently_added = 0
    while a:
        if list1 and not recently_added == "list1":
            try:
                x = list1[0]
                x = x.s
                y = list2[0]
                y = y.s
            except:
                x = list1[0]
                x = x.s
                y = 0
            if x >= y:
                merged_list.append(list1[0])
                recently_added = "list1"
                del(list1[0])
        if list2 and not recently_added == "list2":
            try:
                x = list1[0]
                x = x.s
                y = list2[0]
                y = y.s
            except:
                x = 0
                y = list2[0]
                y = y.s
            if y >= x:
                merged_list.append(list2[0])
                recently_added = "list2"
                del(list2[0])
        a -= 1
    return merged_list

make_last_list(ls1, ls2, ml)

print ml

for x in ml:
    print x.n, x.s

编辑:我不知道为什么这个问题被阻止我可以再解释一下我想要实现的目标。我希望我的函数将两个列表的内容合并为一个,但是如果子类's'的值相同,它将从一个列表中添加一个整个条目(例如aa,ab) (ls1)然后是另一个(ls2)。

1 个答案:

答案 0 :(得分:2)

值得注意的一点是,在您的数据中,每个类实例都有s = 2。现在看make_last_list函数

在第一次迭代后,您将附加到merged_list并设置recently_added = 'list2'

从第二次迭代开始,if list1 and not recently_added == "list1"为True但if x>y为False,因此merged_list不会更改,第二次if条件if list2 and not recently_added == "list2"也为False。

首次迭代后没有任何反应。将s值更改为某些不同的数字,您将看到所需的输出

一个小小的改进。而不是

merged_list.append(list1[0])
del list1[0]

你可以做到

merged_list.append(list1.pop(0))