利用for循环 遍历列表a
a=[1,2,3,4,5]
for i in a[::-1]: #-1表示从右往左
print(i)
i+=1 #这句多余
5
4
3
2
1
a=['a','b','c','d','e']
for member in a:
print(member)
a
b
c
d
e
a=['a','c','d','ok']
for i in a[::-1]:
print(i)
ok
d
c
a
enumerate多用于在for循环中得到计数
a=['a','c','d','ok']
for index,item in enumerate(a):
print(index,item) #index,索引号;item列表中的元素项如a,c ,d
0 a
1 c
2 d
3 ok
注:可以指定索引号起始数.
a=['a','c','d','ok']
for index,item in enumerate(a,1): #指定索引起始值为1而不是通常默认的0
print(index,item)
1 a
2 c
3 d
4 ok
补充: (更多参考https://blog.csdn.net/churximi/article/details/51648388)
如果要统计文件的行数,可以这样写:
count = len(open(filepath, 'r').readlines())
1
这种方法简单,但是可能比较慢,当文件比较大时甚至不能工作。
可以利用enumerate():
count = 0
for index, line in enumerate(open(filepath,'r')):
count += 1
x = list(range(20))
for index, value in enumerate(x):
if value == 3: #当循环到value=3时,index也是其对应的索引号3,
x[index] = 5 #所以x[3]=5,即是把值3改为5.
a=list(range(10))
print(a[len(a)-1-i]) #从列表的后面朝前逐个输出
print(a.pop()) #与上句输出功能相同,其实不同,上一句受i的变化影响,如果涉及改变列表长度的时候
# 则上一句大多执行不完整就会因下标对应的元素,与实际位置不一样,而提示出错不能运行.
for i in range(10):
range()的用法:
语法:range(start, stop [,step]) ;start 指的是计数起始值,默认是 0;stop 指的是计数结束值,但不包括 stop ;step 是步长,默认为 1,不可以为 0 。range() 方法生成一段左闭右开的整数范围。
-
>>> a = range(5) # 即 range(0,5) -
>>> a -
range(0, 5) -
>>> len(a) -
5 -
>>> for x in a: -
>>> print(x,end=" ") -
0 1 2 3 4
对于 range() 函数,有几个注意点:(1)它表示的是左闭右开区间;(2)它接收的参数必须是整数,可以是负数,但不能是浮点数等其它类型;(3)它是不可变的序列类型,可以进行判断元素、查找元素、切片等操作,但不能修改元素;(4)它是可迭代对象,却不是迭代器。
-
# (3)序列操作
-
>>> b = range(1,10)
-
>>> b[0]
-
1
-
>>> b[:-3] #和列表类似,方括号内的位号,-3表示从右往左第3个数。因为range(1,10)最右边的数为9,所以-3位为7。
-
range(1, 7)
-
>>> b[0] = 2 #会显示错误,因为与字符串一样,属不可改原值
-
TypeError Traceback (most recent call last)
-
...
-
TypeError: 'range' object does not support item assignment
range(起始数,结束数,间隔),在结束数之前的一位为止,不包括结束数位置.
for i in range(0,10,2):
print(i)
0
2
4
6
8
尝试编写程序,生成包含20个随机数的列表,然后 将前十个元素升序排列,后十个元素降序排列,并输出结果
import random
x = [random.randint(0,100) for i in range(20)] #从0到时100(包含0和100)生成20个随机数,
print(x)
y = x[0:10]
y.sort()
x[0:10]=y #这一句升序后的10个数赋与列表前10位.
y = x[10:20]
y.sort(reverse = True) #降序
x[10:20] = y #降序后的数给后10位
print(x)
(参考:https://blog.csdn.net/anyifan369/article/details/84963379)
关于随机数random
在Python中,通过import random,然后调用random.randomint(a,b)得到的数为(a<=x<=b),
import random
for i in range(20):
print(random.randint(0,1))
# 输出
1
在numpy中的random模块中,调用random.randint(a,b)得到的是 ( a<= x < b)
from numpy import random
for i in range(20):
print random.randint(0,1)
#输出
0
0
使用循环求解百钱买百鸡问题。假设大鸡5元一只,中鸡3元一只,小鸡1元三只,现有100元钱想买100只鸡,有多少种买法?
分析:
先考虑一下用while还是用for循环,深入思考一下看看,循环次数能否确定,
设大鸡x只,中鸡y只,小鸡z只
则有:
x+y+z=100 #100只 鸡数100
5*x+3*y+z*1//3=100 #100元 钱数100
x,y,z ∈ N 鸡数x,y,z都是自然数,不有为负数,这也是一个条件.
取其中的一种鸡,大鸡,X有几种可能,也就是推出可能的循环取值次数,最多有100//5=20.
遍历range(21)计数应该取21,表示0至20; 中鸡的取值最多只能100//3=33 取33,range(34)
//表示整除 返回不大于结果的一个最大的整数 /专用于表示浮点计算.结果带有小数点.
for x in range(21):
for y in range(34):
z=100-x-y
if z%3 ==0:
if 5*x + 3*y +z//3==100:
print(x,y,z)
0 25 75
4 18 78
8 11 81
12 4 84
[Finished in 0.1s]
在用print输出的时候,如果想在同一行输出 ,则可参考如下方式:print (i,end='')
for i in reversed([2, 3, 4, 5]):
print(i, end = ',') #引号中的,表示要用,分隔开各元素.
5,4,3,2,
如果不用,隔开,print(i, end = '')则输出为:
5432
关于reversed(seq),反向迭代,并且只能消费一次,之后变为空.
列表常见错误大多数是错在标点符号(引号、括号、逗号等),特别是逗号用成了全角的。搜狗输入法可以通过ctrl+.来变换为半角符号状态(
)。
微软win10带的五笔没有发现这个功能。虽然可以用左shift键实现中文输入法关闭,但常因频繁切换shift键带来误差,所以换掉。
写一段代码,实现两个字典的相加,不同的key对应的值保留,相同的key对应的值相加后保留。
dicta = {"a":1,"b":2,"c":3,"d":4,"f":"hello"}
dictb = {"b":3,"d":5,"e":7,"m":9,"k":"world"}
如上示例得到结果为:
dictc = {"a":1,"b":5,"c":3,"d":9,"e":7,"m":9,"f":"hello","k":"world"}
dicta = {"a":1,"b":2,"c":3,"d":4,"f":"hello"}
dictb = {"b":3,"d":5,"e":7,"m":9,"k":"world"}
dictc={}
for key in dicta:
if dictb.get(key):
dictc[key]=dicta[key]+dictb[key]
else:
dictc[key]=dicta[key]
for key in dictb:
if dicta.get(key):
pass
else:
dictc[key]=dictb[key]
print(dictc)
本文介绍了Python中的for循环及其与range()函数的使用,详细解析了range()的语法和注意事项,包括其不可变性和可迭代特性。示例展示了如何用for循环解决百钱买百鸡问题,并探讨了在不同场景下选择while或for循环的考量。同时,文章提到了列表操作中的常见错误以及如何在一行中打印多个元素,并讨论了反向迭代器reversed()的使用。最后,提供了一段代码实现两个字典的合并与值相加。

1302

被折叠的 条评论
为什么被折叠?



