zoukankan      html  css  js  c++  java
  • python for循环巧妙运用(迭代、列表生成式)

    介绍

    我们可以通过for循环来迭代list、tuple、dict、set、字符串,dict比较特殊dict的存储不是连续的,所以迭代(遍历)出来的值的顺序也会发生变化。
     
     

    迭代(遍历)

    #!/usr/bin/env python3
    #-*- coding:utf-8 -*-
    vlist=['a','b','c']
    vtuple=('a','b','c')
    vdict={'a': 1, 'b': 2, 'c': 3}
    vset={'a','b','c'}
    vstr='abc'
    for x in vlist:
        print('list:',x)
    for x in vtuple:
        print('tuple:',x)
    for x in vdict:
        print('dict:',x)
    for x in vset:
        print('set:',x)
    for x in vstr:
        print('str:',x)
    list: a
    list: b
    list: c
    tuple: a
    tuple: b
    tuple: c
    dict: c
    dict: a
    dict: b
    set: a
    set: b
    set: c
    str: a
    str: b
    str: c

    判断一个对象是可迭代对象可以通过collections模块的Iterable类型判断:

    >>> from collections import Iterable
    >>> isinstance('abc', Iterable) 
    True
    >>> isinstance([1,2,3], Iterable) 
    True
    >>> isinstance(123, Iterable) 
    False

    多值for操作

    >>> for x, y in [(1, 1), (2, 4), (3, 9)]:
        print(x,y)
    
        
    1 1
    2 4
    3 9

    生成下标

    >>> for x, y in enumerate(['a', 'b', 'c']):
        print(x, y)
    
        
    0 a
    1 b
    2 c

    生成列表

    1.列出1到10的平方列表
    #!/usr/bin/env python3
    #-*- coding:utf-8 -*-
    L=[]
    for x in range(1,11):
        L.append(x*x)
    print(L)
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

    python提供了更简便的方法处理这个需求

    >>> [x*x for x in range(1,11)]
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

    2.添加判断条件

    只取列表中的偶数

    >>> [x*x for x in range(1,11) if x%2==0]
    [4, 16, 36, 64, 100]

    3.多个for同时判断

    >>> [m+n for m in 'ABC' for n in'abc']
    ['Aa', 'Ab', 'Ac', 'Ba', 'Bb', 'Bc', 'Ca', 'Cb', 'Cc']

    4.获取dict中的value

    一般for操作只能获取dict中的key而无法获取到value,可以利用items获取到values

    >>> d={'a': 'A', 'b': 'B', 'c': 'C'}
    >>> [k + '=' + v for k,v in d.items()]
    ['c=C', 'a=A', 'b=B']

    注意:由于dict是单个key-value所以在for之前不能直接使用k,v for k,v这样代表k,v是多个key而不是指key-value,所以只能进行计算,但是如果计算的话又必须保证key和value是相同的数据类型否则无法进行+操作

    针对key和value是不同的数据类型可以使用普通的for循环,使用print输出

    #!/usr/bin/env python3
    #-*- coding:utf-8 -*-
    d={'a': 1, 'b': 2,'c': 3}
    for k,v in d.items():
        print(k,'=',v)

    5.list中所有的字符串变成小写

    >>> L = ['Hello', 'World', 'IBM', 'Apple']
    >>> [s.lower() for s in L]
    ['hello', 'world', 'ibm', 'apple']

    总结

     python语法太巧妙了,主要归结于它强大的库,让使用python可以少写很多底层的代码。

    备注:

        作者:pursuer.chen

        博客:http://www.cnblogs.com/chenmh

    本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

    《欢迎交流讨论》

  • 相关阅读:
    select 的readonly效果
    HTML5与CSS3设计模式
    关于htons和htonl
    Http Range
    如何隐藏aspx文件格式,变成html
    UITableView的cell 自定义 高度,样式
    gson 数据里面设置特殊字符不转换为十六进制
    HDU2164:Rock, Paper, or Scissors?
    黑马程序员java基础学习网络编程2
    HDU2137:circumgyrate the string
  • 原文地址:https://www.cnblogs.com/chenmh/p/5750726.html
Copyright © 2011-2022 走看看