使用给定的整数n,编写程序以生成包含(i,i * i)的字典,该字典为1到n之间的整数(都包括在内)。然后程序应打印字典。
假设输入:8
然后,输出应为:{1:1、2:4、3:9、4:16、5:25、6:36、7:49、8:64}
提示:
如果将输入数据提供给问题,则应假定它是控制台输入。
考虑使用dict()
def zidian(n): #由于第二例我直接用的for循环跟原答案比太低端了,而且我认为应该锻炼一下运用函数的能力,所以我使用了函数
l = {} #创建一个空字典
for i in range(n): #利用for循环为字典添加键值对
l[i+1] = (i+1)*(i+1)
return l #直接返回值到调用的地方
n = int(input('请输入数字:'))
print(zidian(n))
n=int(raw_input())
d=dict()
for i in range(1,n+1):
d[i]=i*i
print d
在这里用到了dict()函数,dict()函数是用来创建字典的,那么具体的用法是什么呢?
语法:dict(key/value)
key/value – 用于创建字典的键/值对,此处可以表示键/值对的方法有很多,具体可参考下方示例。
eg:
dict0 = dict() # 传一个空字典
print('dict0:', dict0)
输出:dict0: {}
dict1 = dict({'three': 3, 'four': 4}) # 传入一个字典
print('dict1:', dict1)
输出:dict1: {'four': 4, 'three': 3}
dict2 = dict(five=5, six=6) # 传入键值对,并生成字典
print('dict2:', dict2)
输出:dict2: {'five': 5, 'six': 6}
dict3 = dict([('seven', 7), ('eight', 8)]) # 传入一个包含一个或多个元祖的列表,每个元组内包含一个两个元素,并生成键值对,返回一个字典
print('dict3:', dict3)
输出:dict3: {'seven': 7, 'eight': 8}
dict5 = dict(zip(['eleven', 'twelve'], [11, 12])) # 传入一个zip()函数,并生成字典
print('dict5:', dict5)
输出:dict5: {'twelve': 12, 'eleven': 11}
在这个例子中还提到了zip()函数,那zip()函数又是什么呢?
zip()函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表。
eg:
x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
xyz = zip(x, y, z)
print xyz #从结果可以看到,zip()是取每个列表的相同角标的元素组成元组
输出结果为:[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
x = [1, 2, 3]
y = [4, 5, 6, 7]
xy = zip(x, y)
print xy #在组成元组的时候,若列表长度不同,则按照最短的列表为限,长的列表多余的部分直接舍弃
输出结果为:[(1, 4), (2, 5), (3, 6)]
x = [1, 2, 3]
x = zip(x)
print x #即便只有一个列表也会按照元组去重组,所以zip()函数的本质就是把拿到的列表组成元组放在一个列表内
输出结果为:[(1,), (2,), (3,)]
x = zip()
print x #产生了一个空列表
输出结果为:[]
x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
xyz = zip(x, y, z)
u = zip(*xyz)
print u
输出结果为:[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
一般认为这是一个unzip的过程,它的运行机制是这样的:
在运行zip(*xyz)之前,xyz的值是:[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
那么,zip(*xyz) 等价于 zip((1, 4, 7), (2, 5, 8), (3, 6, 9))
所以,运行结果是:[(1, 2, 3), (4, 5, 6), (7, 8, 9)],python中的*号 删除可以看这里
注:在函数调用中使用*list/tuple的方式表示将list/tuple分开,作为位置参数传递给对应函数(前提是对应函数支持不定个数的位置参数)
*用于参数前面,表示传入的多个参数将按照元组的形式存储,是一个元组
x = [1, 2, 3]
r = zip(* [x] * 3)
print r
输出结果为:[(1, 1, 1), (2, 2, 2), (3, 3, 3)]
它的运行机制是这样的:
[x]生成一个列表的列表,它只有一个元素x
[x] * 3生成一个列表的列表,它有3个元素,[x, x, x]
zip(* [x] * 3)的意思就明确了,zip(x, x, x)
持续更新中,如果存在哪些问题,希望大家能及时指出,我一定会及时修改!