您的位置:首页 > 编程语言 > Python开发

010 Python语法之二维列表-迭代器生成器

2017-07-07 17:37 453 查看
简书地址:http://www.jianshu.com/p/54dce4ff2904

二维列表

list1 = [[1,2,3], [4,5,6], [7,8,9]]


二维列表的遍历

第一种方式

list1 = [[1,2,3], [4,5,6], [7,8,9]]
for i in list1:
print(i)


第二种方式

for i in range(0, len(list1)):
print(list1[i])


二维列表求和(我做成了同一个函数求出这些和)

求二维列表每一行的和

求二维列表每一列的和

求二维列表总和

数据:
1, 2, 3, 4, 1, 2, 3, 5
1, 2, 3, 4
1, 2, 3, 4, 5
1, 2, 3, 4, 10

def getListSum(list1):
sum1, sum2, sum3 = 0, [], []  # sum1为总和,sum2为每一行的和,sum3为每一列的和
for x, i in zip(list1, range(0, len(list1))):  # 拿到二维列表每个元素(一维列表),元素个数
sum2.append(0)
for y, j in zip(x, range(0, len(x))):  # 拿到二维列表每个元素(列表)内的每个元素(也就是具体的数字),元素个数
sum1 += y  # 每一个元素求和
sum2[i] += y  # 每一行的和
if j >= len(sum3):
sum3.append(0)
sum3[j] += y  # 每一列的和
return sum1, sum2, sum3

list1 = [[1, 2, 3, 4, 1, 2, 3, 5], [1, 2, 3, 4], [1, 2, 3, 4, 5], [1, 2, 3, 4, 10]]

s1, s2, s3 = getListSum(list1)
print("总和:", s1)
print("每一行的和", s2)
print("每一列的和", s3)

打印:
总和: 66
每一行的和 [21, 10, 15, 20]
每一列的和 [4, 8, 12, 16, 16, 2, 3, 5]


将二维列表的处理封装成一个类

class DealUtils:
def __init__(self, list1):
self.list1 = list1

def getListSum(self):
sum1, sum2, sum3 = 0, [], []  # sum1为总和,sum2为每一行的和,sum3为每一列的和
for x, i in zip(self.list1, range(0, len(self.list1))):  # 拿到二维列表每个元素(一维列表),元素个数
sum2.append(0)
for y, j in zip(x, range(0, len(x))):  # 拿到二维列表每个元素(列表)内的每个元素(也就是具体的数字),元素个数
sum1 += y  # 每一个元素求和
sum2[i] += y  # 每一行的和
if j >= len(sum3):
sum3.append(0)
sum3[j] += y  # 每一列的和
return sum1, sum2, sum3

list1 = [[1, 2, 3, 4, 1, 2, 3, 5], [1, 2, 3, 4], [1, 2, 3, 4, 5], [1, 2, 3, 4, 10]]
dealListUtils = DealUtils(list1)
s1, s2, s3 = dealListUtils.getListSum()
print("总和:", s1)
print("每一行的和", s2)
print("每一列的和", s3)


迭代器(iter(序列))

list1 = [1, 2, 3, 4]
it = iter(list1)
print(next(it))


next(迭代器)

迭代只能从前往后

遍历方法1

list1 = [1, 2, 3, 4]
it = iter(list1)
for i in it:
print(i)


遍历方法2

list1 = [1, 2, 3, 4]
it = iter(list1)
while True:
try:
print(next(it))
except StopIteration:
break


生成器

关键字yield

def gen():
print("num1")
yield 1
print("num2")
yield 2
print("num3")
yield 3

gens = gen()    # 这个gens就相当于iter(序列)后的it实例,遍历方式一样


列表推导式

a = [i for i in range(100) if not(i%2) and i % 3]


生成器推导式

d = (i for i in range(100))
可以用next迭代
也可以用for迭代
for each in d:
print(each)


总结

二维列表和Java中的二维数组是一个概念,只不过列表存储的是任意类型数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python