1. 判断 list 内有无重复元素
is_duplicated,使用 list 封装的 count 方法,依次判断每个元素 x 在 list 内的出现次数。
如果大于 1,则立即返回 True,表示有重复。
如果完成遍历后,函数没返回,表明 list 内没有重复元素,返回 False。
In [1]: def is_duplicated(lst):
...: for x in lst:
...: if lst.count(x) > 1: # 判断 x 元素在 lst 中的出现次数
...: return True
...: return False
调用 is_duplicated 方法:
In [2]: a = [1, -2, 3, 4, 1, 2]
...: print(is_duplicated(a))
True
以上方法实现不简洁,借助 set 判断更方便:
def is_duplicated(lst):
return len(lst) != len(set(lst))
count( ) 方法用于统计某个元素在列表中出现的次数。
返回值:返回元素在列表中出现的次数。
set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
返回值:返回新的集合对象。
2. 列表反转
一行代码实现列表反转,非常简洁。
- [::-1] 这是切片的操作。
- [::-1] 生成逆向索引(负号表示逆向),步长为 1 的切片。
所以,最后一个元素一直数到第一个元素。这样,不正好实现列表反转吗?
In [4]: def reverse(lst):
...: return lst[::-1]
调用 reverse:
In [5]: r = reverse([1, -2, 3, 4, 1, 2])
...: print(r)
[2, 1, 4, 3, -2, 1]
关于这类型的笔记如下:
a='python'
b=a[::-1] # 倒叙
print(b) # nohtyp
c=a[::-2] # 倒叙每隔一个字符输出一个字符
print(c) # nhy
# 从后往前数的话,最后一个位置为-1
d=a[:-1] # 从位置0到位置-1之前的数
print(d) # pytho
e=a[:-2] # 从位置0到位置-2之前的数
print(e) # pyth
3. 找出列表中的所有重复元素
遍历列表,如果出现次数大于 1,且不在返回列表 ret 中,则添加到 ret 中。
满足 x not in ret ,则表示 x 不在列表中。
In [6]: def find_duplicate(lst):
...: ret = []
...: for x in lst:
...: if lst.count(x) > 1 and x not in ret: # 找到一个新的重复元素
...: ret.append(x)
...: return ret
调用 find_duplicate:
In [8]: r = find_duplicate([1, 2, 3, 4, 3, 2])
...: print(r)
[2, 3]
在 Python 中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,Python 并没有拷贝这个对象,而只是拷贝了这个对象的引用,我们称之为浅拷贝。
python append()与深拷贝、浅拷贝 – BjutHz – CSDN
在 Python 中,为了使当进行赋值操作时,两个变量互补影响,可以使用 copy 模块中的 deepcopy 方法,称之为深拷贝。
append() 函数
当 list 类型的对象进行 append 操作时,实际上追加的是该对象的引用。
>>>alist = []
>>> num = [2]
>>> alist.append( num )
>>> id( num ) == id( alist[0] )
True
如上例所示,当num发生变化时(前提是 id(num) 不发生变化),alist的内容随之会发生变化。往往会带来意想不到的后果,想避免这种情况,可以采用深拷贝解决:
alist.append(copy.deepcopy(num))
注: id() 函数:返回对象的唯一标识,可以类比成该对象在内存中的地址。