python小知识点 - 一句话循环

参考博客:python基础-列表推导式
笔记仅做总结复习使用~


python使用循环时(虽然还没使用过大的循环或嵌套循环),利用for循环写,逻辑更清晰些,但有时候循环后得到的结果要拼接到列表中,使用for循环会涉及到缩进,如果嵌套循环,缩进会更复杂些,对于循环在哪里结束就会比较迷(对我来说…),突然就体会到一句话循环(列表式推导)的便利了,总结一下下。

单层、双层简单循环

比如:
‘Can you speak English?’
要将这句话中每个单词中的大写转换为小写,使用for循环时:

test=['Can','you','speak','English']
for i in test:
	print(i.lower())

can
you
speak
english
但使用列表式推导时:

test=['Can','you','speak','English']
[i.lower() for i in test]

[‘can’, ‘you’, ‘speak’, ‘english’](输出仍为列表形式)

同样是使用了 “for i in test” 语句, 列表式循环便捷得直接对 i 进行操作,省地方省格式!

中括号内的语句是嵌套关系,最前面的是最后执行的语句,最后面的最内层做循环的语句。

[x+3 for x in range(0,5)]
# [3, 4, 5, 6, 7]

[a+b for a in range(0,5) for b in range(1,3)]
# [1, 2, 2, 3, 3, 4, 4, 5, 5, 6]

'''使用for循环对比'''
for x in range(0,5):
	print(x+3)

for a in range(0,5):
    for b in range(1,3):
        print(a+b)

简单循环+if条件

[x for x in range(0,11) if x%2==0]
#[0, 2, 4, 6, 8, 10]

'''使用for循环对比'''
for x in range(0,11):
    if x%2==0:
        print(x)
[a+b for a in range(2,6) if a%2==0 for b in [1,3,4] if b%2==0]
#[6, 8]

'''使用for循环对比'''
for a in range(2,6):
    if a%2==0:
        for b in [1,3,4]:
            if b%2==0:
                print(a+b)
#或者
for a in range(2,6):
        for b in [1,3,4]:
            if b%2==0 and a%2==0: #if b%2==0 | a%2==0
                print(a+b)

就很长,很占地方…

嵌套循环

这里引用一个例子仅供学习(参考文章),从大列表中取小列表中的每个元素。

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

# 使上述nums中的每个数字都取出来,放到一个新列表中,用到2个for循环
new_nums = []
for nums_a in nums:
    # print(nums_a)
    for i in nums_a:
        new_nums.append(i)

但使用列表推导式:

new_num = [i for nums_a in nums for i in nums_a]

从 i 后面断开,i 即为最后要取的对象,for nums_a in num for i in nums_a为外层循环到内层循环!

还需要多练习多在实际场景中利用,才能灵活使用…

你可能感兴趣的:(python)