程序员之所以犯错误,不是因为他们不懂,而是因为他们自以为什么都懂。
s_a = set([1, 2, 2, 3, 4, 5, 6])
s_b = set([4, 5, 6, 7, 8, 9])
print(s_a)
print(s_b)
# 判断元素是否存在
print(5 in s_a)
print(10 in s_b)
结果 :
{1, 2, 3, 4, 5, 6}
{4, 5, 6, 7, 8, 9}
True
False
# 并集
print(s_a | s_b)
print(s_a.union(s_b))
# 交集
print(s_a & s_b)
print(s_a.intersection(s_b))
# 差集 A - (A & B)
print(s_a - s_b)
print(s_a.difference(s_b))
# 对称差 (A | B) - (A & B)
print(s_a ^ s_b)
print(s_a.symmetric_difference(s_b))
结果:
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{4, 5, 6}
{4, 5, 6}
{1, 2, 3}
{1, 2, 3}
{1, 2, 3, 7, 8, 9}
{1, 2, 3, 7, 8, 9}
# 修改元素
s_a.add('x')
s_a.update([4, 5, 60, 70])
print(s_a)
s_a.remove(70)
print(s_a)
# s_a.remove(100)
print(len(s_a))
for i in s_a:
print(i)
结果:
{1, 2, 3, 4, 5, 6, 'x', 70, 60}
{1, 2, 3, 4, 5, 6, 'x', 60}
8
1
2
3
4
5
6
x
60
li = list(range(10))
print(li)
# 切片 [start:end:steps] >= start & < end
print(li[2:5]) # [3, 4, 5]
print(li[:4]) # [0, 1, 2, 3]
print(li[5:]) # [6, 7, 8, 9]
print(li[0:20:3]) # [0, 3, 6, 9]
# 负值怎么处理?
print(li[5: -2]) # [5, 6, 7]
print(li[9:0:-1]) # [9, 8, 7, 6, 5, 4, 3, 2,1]
print(li[9::-1]) # [9 ... 0]
print(li[::-2]) # [9, 7, 5, 3, 1]
# 切片生成一个新的对象
print(li) # 还是保持原样 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
re_li = li[::-1]
print(re_li) #[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
简单的切片操作,结果都写注释上了
def spiral_order(matrix):
ret = []
rows = len(matrix)
if rows == 0:
return ret
columns = len(matrix[0])
i, j = 0, 0 # 方阵的左上角坐标
while (rows > 0) and (columns > 0):
for k in range(j, j + columns): # 第一行
ret.append(matrix[i][k])
if rows > 1: # 行数大于1
for k in range(i + 1, i + rows): # 最右列
ret.append(matrix[k][j + columns - 1])
if columns > 1: # 列数大于1
for k in range(j + columns - 2, j - 1, -1): # 最下行
ret.append(matrix[i + rows - 1][k])
for k in range(i + rows - 2, i, -1): # 最左列
ret.append(matrix[k][j])
rows -= 2
columns -= 2
i += 1
j += 1
return ret
print(spiral_order([]))
print(spiral_order([[1]]))
print(spiral_order([[1, 2], [3, 4]]))
print(spiral_order([[1, 2, 3], [4, 5, 6], [7, 8, 9]]))
numbers= [[0 for i in range(10)] for x in range(10)]
for x in range(10):
for y in range(10):
numbers[x][y]=x+y
print(spiral_order(numbers))
结果:
[]
[1]
[1, 2, 4, 3]
[1, 2, 3, 6, 9, 8, 7, 4, 5]
。。。。。
刚看到这段代码你可能有点懵,这打印的是什么,没啥顺序啊,这其实是一道算法题,要求是这样的
给定任意大小的矩形数组,将它按照顺时针打印出来,大体的样子可以画一张图来表示
如果数字少你还是不明白的话,你再看看这张图
程序很鸡肋,就是考算法的
可以采取正向思维解决,先打印第一行,然后打印最后一列,再打印最后一行,打印最左边一列,然后行列移动缩小范围再次进行之前的操作