可迭代对象:列表、字符串、元组

列表(list [])的“魔法”

  定义

    列表是一种类,中括号把数据元素(六大数据类型都可以)括起来,用逗号作分割符。  

    有序,元素可被修改。

  特性

    深灰“魔法”

    ——可索引(下标)取值;

    ——可切片,切片结果也是列表;

        li=[1,12,9,'age','alex']  #通过list类创建的对象,li

        li[1:3]=[120,90]

        print(li)

        输出

          [1,120,90,'age','alex']

    ——支持in操作

    ——支持for/while循环

    ——可嵌套

        查找嵌套列表的元素可在[]后再加[]

    ——列表元素可以被修改

        li[1]=2

        li[2]=9

        print(li)

        输出

          [1,2,9,'age','alex']

    ——列表元素可以删除

        ...

        del li[1]

        print(li)

        输出

          [1,9,'age','alex']

        del li[1:3]

        输出

          [1,'alex']

    ——字符串转列表,用list()

        s='abcd'

        new_s=list(s)

        print(new_s)

        输出

          ['a','b','c','d']

    ——列表转字符串

        '''  li=[11,22,33,'123','alex']  

            r=str(li)

            print(r)  #输出‘[11,22,33,'123','alex']’  '''

      1.既有数字,又有字符串,写for循环依次处理

        for i in li:

          s=s+str(i)

        print(s)

      2.只有字符串,使用join

        li=['123','alex']

        v=''.join(li)

        print(v)

        输出

          123alex

  灰“魔法”——list类中提供的方法

    - append(原来值最后追加,对列表本身进行修改,而非像字符串一样,创建一个新变量添加元素)

    - clear(清空列表,使列表变成[])

    - copy((浅)拷贝)

      li=[11,22,33,44]

      v=li.copy

      print(v)

      输出

        [11,22,33,44]

    - count(计算元素出现的次数)

    - extend(扩展源列表)

       li=[11,22,33,44]

      li.extend([9898,'不得了'])  #相当于执行了for循环

      print(li)

      '''  li.append([9898,'不得了'])  #整体放进去

          print(li)  '''

      '''  li.extend('不得了')

          print(li)  '''

      输出

        [11,22,33,44.9898,‘不得了’]

        '''  [11,22,33,44,[9898,‘不得了’]]  '''

        '''  [11,22,33,44,‘不','得','了’]  '''

    - index(根据值获取当前值索引位置,左边优先)

      li=[11,22,33,44]

      v=li.index(22)

      print(v)

      输出

        1

    - insert(在指定索引位置插入元素)

      li=[11,22,33,44]

      li.insert(0,99)

      print(li)

      输出

        [99,11,22,33,44]

    - pop (删除某个值{默认最后的值},并获取删除的值); - remove(删除列表中的指定值,左边优先)

      li=[11,22,33,44]

      v=li.pop()

      print(v)

      print(li)

      v1=li.pop(1)

      print(v1)

      print(li)

      输出

        44

        [11,22,33]

        22

        [11,33]

      li=[11,22,33,22,44]

      li.remove(22)

      print(li)

      输出

        [11,33,22,44]

p.s.  删除操作 pop / remove / del li[0] / del li[7:9] / clear

    - reverse(将当前列表进行反转)

      li=[11,22,33,22,44]

      li.reverse()

      print(li)

      输出

        [44,22,33,22,11]

    - sort

      li=[11,44,22,33,22]

      li.sort()

      print(li)

      li.sort(reverse=True)

      print(li)

      输出

        [11,22,22,33,44]

        [44,33,22,22,11]

p.s. - cmp ; - key 涉及函数,lambda表达式  内置函数sorted 函数处补充

元组tuple

  圆括号括元素,元素的一级元素不可被修改,不能被增加或者删除。一般写元祖的时候,推荐最后加逗号,不影响元组长度,逗号后面是空的。  有序。

  特性

    ——可索引

      tu=(111,'alex',(11,22),[(33,44)],True,33,44,)

      v=tu[0]

      print(v)

      输出

        111

    ——可切片

      ...

      v=tu[0:2]

      print(v)

      输出

        (111,'alex')

    ——不可修改、增加或删除

    ——可for循环,是可迭代对象

    ——字符串/列表/元组可相互转换

      s='asdfasdf0'

      li=['asdf',1231]

      tu=(123,123,'asdf')

      tu1=('asdf','asdf')

      v=tuple(s)

      print(v)

      v=tuple(li)

      print(v)

      v=list(tu)

      print(v)

      v='_'.join(tu1)

      print(v)

      输出

        ('a','s','d,'f','a','s','d,'f','0')

        ('asdf',1231)

        [123,123,'asdf']

        asdf_asdf

    ——二级或更高级元素可修改

      tu=(111,'alex',(11,22),[(33,44)],True,33,44,)

      tu[3][0]=567

      print(tu)

      输出

        (111,'alex',(11,22),[567],True,33,44,)

  两个方法

    - count 获取指定元素在元组中出现的次数

    - index 获取指定元素在元组中第一次出现的索引值

字典dict

  字典的value可以是任何值;字典的key不能是布尔值、列表和字典。  字典无序,因为无序所以没有系统生成的索引,通过键来找值。

  info={

    'k1':18,  #键值对

    'k2':True

    'k3’:[

      11,

      [],

      ()

      22,

      33,

      {

        'kk1':'vv1',

        'kk2':'vv2',

        'kk3':(11,22),  #找这里的第一个元素 v=info['k3'][5]['kk3'][0]

      }

    ]

    ‘k4’:(11,22,33,44)

     }

    info1={

      1:'asdf',

      'k1':'asdf',

      True:'123',

      [11,22];123,

      (11,22):123,

      {'k1:v1'}:123,

    }

    print(info1)

    输出

      {'k1':'asdf',1:'123',(11,22):123}

      True 1 False 0 这里True和键1重复了 key重复时只能保留一个

      布尔值、列表和字典(涉及到哈希表)不能作为字典的key,常数、元组可以

      (列表或字典若作为key会报错)

  特性

    ——通过键来找值

    ——不可切片

    ——支持del删除 键值对  del info['k1']  del info['k3'][5]['kk1']

    ——默认for循环输出里面元素,只输出key

        for item in info{.keys}()

      for item in info.values()  输出value

      for k,v in info.items()  输出key和value

    ——while循环不太好用,key不是常规索引

  方法

    - fromkeys

1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 v=dict.fromkeys(['k1',123,'999'])
4 v1=dict.fromkeys(['k1',123,'999'],123)
5 print(v,v1)

    输出

      {'k1': None, 123: None, '999': None} {'k1': 123, 123: 123, '999': 123}

    - get

1 ...
2 dic={'k1':'v1'}
3 v=dic.get('k1')
4 print(v)
5 v=dic.get('kk1')
6 print(v)
7 v=dic.get('kk1',111)    #第一个数是想获取的key,
8 print(v)                #如果不存在结果为第二个值,
9                         #如果存在则获取其对应value

    输出

      v1

      None

      111

    - pop(如果要删除的键值对不存在,dic.pop(key,default)返回default的值); - popitem(随机删除一个键值对,dic.popitem())

1 ...
2 dic={'k1':'v1','k2':'v2'}
3 v=dic.pop('k1')
4 print(dic,v)

    输出

      {'k2': 'v2'} v1

    - setdefault(设置值,如果已经存在则不设置,获取当前key对应的value;不存在,设置,获取当前key对应的value)

1 ...
2 dic={'k1':'v1','k2':'v2'}
3 v=dic.setdefault('k1','123')
4 print(dic,v)
5 dic={'k1':'v1','k2':'v2'}
6 v=dic.setdefault('k111','123')
7 print(dic,v)

    输出

      {'k1': 'v1', 'k2': 'v2'} v1

      {'k1': 'v1', 'k2': 'v2', 'k111': '123'} 123

    - update

1 ...
2 dic={'k1':'v1','k2':'v2'}
3 dic.update({'k1':'111','k3':123})
4 print(dic)
#另一种写法:dic.update(k1=123,k3=345,k5='asdf')
  输出{'k1': 123, 'k5':'asdf','k2': 'v2', 'k3': 345}

    输出

      {'k1': '111', 'k2': 'v2', 'k3': 123}

整理

  一、数字

    int()

  二、字符串

    replace / find / join / strip / startswith / split / upper / lower / format

    **kwargs 代表 可以传 key=value 或者 传字典 **{}

1 ...
2 template='I am {name},age:{age}'
3 v=template.format(name='alex',age=19)
4 #v=template.format(**{'name':'alex','age':19})  和上面的一样效果
5 print(v)

    输出

      I am alex,age:19

  三、列表

    append / extend / insert

    索引、切片、循环

  四、元组

    忽略

    索引、切片、循环  以及元素不能被修改

  五、字典

    get / update / keys / values / items

    for,索引

    列表元组字符串字典可做in操作

 

1 ...
2 dic={'k1':'v1','k2':'v2'}
3 v='k1' in dic
4 print(v)

 

    输出

      True

 

  六、布尔值

    本身内存里就是0或1

    bool(...)

 

    None '' 0 {} [] () 都是假的

      

posted on 2018-09-15 14:16  阿缘要努力变强  阅读(191)  评论(0编辑  收藏  举报