python几道对于列表的面试题

朋友最近面试某个企业,其中有几道列表的题目,对python中的列表知识需要有很清晰的认识。下面对这几个题目列一下:

题目一:

alist = [1, 2, 3, 4, 5, 6]
for aa in alist:
    alist.remove(aa)
print(alist)

来来来,我们解析下题目。

我先说答案:

[2, 4, 6]

这里很多人会说最后答案为[]。

这是错误的。我们这里要记住二点:

1.列表是可变的序列,所以在对原序列删除时,序列就会变.

2. for循环真正是通过索引来找到元素的

所以。我们继续看这个问题

当for为第一次时,索引为0,alist为所有的。执行后alist为[2,3,4,5,6]

当for第2次时,索引为1,aa对应的索引对应为3,执行后alist为[2,4,5,6]

当for第3次时,索引为2,aa对应为索引对应为5,执行后alist为[2,4,6]

alist只为3了,所以不会继续执行for循环了

 

题目二:

gl_var = 1

gl_var = 1
gl_list = []

def test_function():
    gl_var = 2
    gl_list.append(1)

test_function()
print(gl_var, gl_list)

还是先直接说下答案:

1,[1]

这个题目,有2个考察点:

1. 局部变量和全局变量

2. 列表是可变的,定义的指定内存

gl_var是全局变量,但在含数中数据局启变量,最终不改变值

gl_list是列表,在定义时,会执行一快内存分配给列表,函数中对列表做了改变,最终导致全局的gl_list也变更了

 

题目三:

 

def testExtend(val, list_l=[]):
    list_l.append(val)
    return list_l

list1 = testExtend(10)
list2 = testExtend(123,[])
list3 = testExtend('a')
print(list1, list2, list3)

还是直接先说答案吧,答案为:

[10, 'a'] [123] [10, 'a']

说说原因:

我们这里还是考虑列表的可变性,函数中list_l是一个可变列表。所以在实际中会改变值。

第2个含税,传了一个空列表当当数,所以就为空

题目四:

class Test(object):
    def p_test(self, data=[]):
        data.sort()
        data.append('end')
        return data

test1 = Test()
print(test1.p_test())
test2 = Test()
print(test2.p_test())
test3 = Test()
print(test3.p_test(data=['name', 'age:35']))
test4=Test()
print(test4.p_test())

也还是直接说答案:

['end']
['end', 'end']
['age:35', 'name', 'end']
['end', 'end', 'end']

相信通过前面几个例子,我们也可以指定这个题目是怎么一回事了吧。这里就不解释了。

posted @ 2022-05-16 13:29  Believer007  阅读(89)  评论(0编辑  收藏  举报