python-list和tuple

一、列表补充

  1、list(iterable)只能是一个参数,并且是可迭代的

  2、' '.join(iterable)  ---->把可迭代的合并成一个字符串

# 随机产生qq号码:5-10  0不能开头
import random
qq = []
count = 0
while True:
    ran = random.randint(0,9)
    if count ==0 and ran == 0:
        continue
    qq.append(str(ran))
    count+=1
    if count ==10:
        break
print(qq)
b = ''.join(qq)
print(b)

  3、count的使用

# count的使用
list = [1,3,5,7,9,3,2,1,4,7,3,9]
count = 0
for i in list:
    if i==3:
        count+=1
print(count)


print(list.count(3))

  4、符号: +    *   []    [:]   in  is  

list = [1,2,3,4]
list2 = [1,3,4,6]
list_add = list+list2
print(list_add)
list_c = list*2
print(list_c)

  5、运算系统的内置函数:sum()  min()  max()  sorted()  cmp()  python3.x中cmp已经不支持了在列表中。

import random
numbers = []
for i in range(10):
    ran = random.randint(1,30)
    numbers.append(ran)
print(numbers)
print(sum(numbers))

max_value = max(numbers)
print(max_value)

min_value = min(numbers)
print(min_value)

sort =sorted(numbers,reverse=True)
print(sort)

注:列表排序:

系统排序:sorted(list)  ----  返回的就是排序后的结果

     list2 = sorted(list)

列表自身排序:sort()

     list1.sort()  -----没有返回值,将list1进行排序

     print(list1)        排序好的列表

降序排列:

list1=[3,6,9,10,2,4,0]
list2 = sorted(list1,reverse=True)
print('方式一:',list2)
list1.sort(reverse=True)
print('方式二:',list1)

 -----------------------------------

补充:python的可变  不可变

  不可变:只要改变变量的值则地址发生改变,则认为此类型是不可变类型

      int   str  float  tuple  bool

  可变:内容发生改变,但是地址没有发生改变,则认为此类型是可变类型

      list  set  dict

list1 = [2, 3, 5]
print(list1)
print(id(list1))

list1.append(8)
print(list1)
print(id(list1))
# [2, 3, 5]
# 1673370433160
# [2, 3, 5, 8]
# 1673370433160

set1 = {4, 7, 0, 2}
print(id(set1))

set1.add(8)
print(id(set1))
# 1673369536104
# 1673369536104

dict1 = {'a': 1, 'b': 2, 'c': 3}
print(id(dict1))

dict1.popitem()
print(id(dict1))
# 1673369509608
# 1673369509608

二、python直接赋值、浅拷贝和深度拷贝解析

直ji接赋值:其实就是对象的引用

浅拷贝copy.copy():拷贝父对象,不会拷贝对象内部的子对象

深度拷贝copy.deepcopy():copy模块的deepcopy方法,完全拷贝父对象和子对象

1、b=a 赋值引用,a和b都指向同一个对象

2、b=a.copy() 浅拷贝,a和b是一个独立的对象,但它们的子对象还是指向同一对象

3、b = copy.deepcopy(a) 深度拷贝,a和b完全拷贝了父对象和子对象,两者完全独立的

示例:

import copy

a = ['张三', '里斯', '王五', '赵六', ['a', 'b', 'c']]  # 原始对象

b = a  # 赋值,传对象的引用
c = copy.copy(a)  # 对象拷贝,浅拷贝
d = copy.deepcopy(a)  # 对象拷贝,深拷贝

a.append('')  # 修改对象a
a[4].append('d')  # 修改对象a中的数组对象

print('a=', a)
print('b=', b)
print('c=', c)
print('d=', d)

三、元组

1、特点:类似列表,不支持删除、添加、修改

2、声明:tuple()

tuple()一旦初始化就不能修改,如果可能,能用tuple代替list就尽量用tuple

元组中只包含一个元素时,需要在元素后面添加逗号

tuple=(3,)

3、元组支持下标和切片

tuple=(1,2,4,6,8,10)

print(tuple[-1])
print(tuple[:3])
print(tuple[::-1])

4、元组的内置函数

不支持: 添加 、删除、修改

支持:

  1》查找:index()  返回第一次找到的位置

  2》统计个数:count()

tuple1 = (1,4,3,2,6,2)
print(tuple1.index(2))  # 返回第一次找到的位置

n = tuple1.count(2)
print(n)

  3》排序:可以使用sorted系统函数排序,但是返回的结果是一个列表

tuple1 = (1,2,5,7,9)
list1 = sorted(tuple1)
tuple1 = tuple(list1)
print(tuple3)   #升序  ,得到的是一个列表

 

  4》类型的转换:

    列表---》元组:tuple(list) 得到的是元组类型

    元组----》列表:list(tuple) 得到的是列表

5、元组可以支持的符号:+   *    []    [:]     in   is

tuple1 = (1,4,3,2,6,2)
tuple2 = (2,4,6,8)

new_tuple = tuple1+tuple2
print(new_tuple)

print(tuple2*2)

# 判断是否在元组中
print(4 in tuple2)
print(1 in tuple1)

    注:元组是不允许修改的这里的添加元素其实是一种转化

import random

tuple1 = (1,)
list1 = list(tuple1)
for i in range(10):
    ran = random.randint(1,10)
    list1.append(ran)
#  将列表转成元组
tuple2 = tuple(list1)
print(tuple2)

 

posted @ 2019-07-29 17:14  刚--  阅读(203)  评论(0编辑  收藏  举报