标签: 列表

  • python字典和列表的混用

    我们建立一个数据查询系统,包含一些基本信息,只要输入正确的人名,就可以查到相应的信息。

    # 定义一个函数,根据输入的员工姓名,和基本信息。
    employees = [
      {'name':'张三', 'title':'教授', '邮箱':'aaa@aaa.aa'},
      {'name':'李四', 'title': '副教授', '邮箱':'bbb@bbb.bb', 'office':'222'},
      {'name':'王五', 'title': '讲师', '年龄': 29, 'office':'220'},
      {'name':'这六'}
    ]
    
    # 定义一个查询员工信息的函数
    def lookup_employee(employees):
        name = input('请输入人名: ')
        for employee in employees:
            if 'name' in employee and employee['name'] == name:
                print('Information for ' + name + ':')
                for key, value in employee.items():
                    print('  ' + str(key) + ' -> ' + str(value))
                return
        print('查无此人!')
    
    # 调用查询员工信息的函数
    lookup_employee(employees)
    
    展开/折叠结果 Employee name: 张三
    Information for 张三:
    name -> 张三
    title -> 教授
    邮箱 -> aaa@aaa.aa
  • python的列表的嵌套

    列表里面可以包含列表。

    my_list = [ [1, 2], [3, 4] ]
    print(my_list[0][1]+my_list[1][0])
    

    可以自己猜一猜,结果是什么。

    5

    其实上面的列表还可以写成另一种写法,结果是完全一样的。这样写可能更好理解一些。

    my_list = [ [1, 2], 
                [3, 4] ]
    print(my_list[0][1]+my_list[1][0])
    

    我们来实例一个计算每个人平均分的代码。

    my_list = [ ['张三', 98, 89], 
                ['李四', 78, 90] ] 
    
    def print_overall_grade_average(my_list): 
        for i in range(len(my_list)): 
            grade_sum = 0 
            for j in range(1, len(my_list[i])): 
                grade_sum += my_list[i][j] 
            print(my_list[i][0], str(grade_sum/(len(my_list[0])-1)))
    
    print_overall_grade_average(my_list)
    

    这里,有两个人,可以增加很多人,下面的函数用来计算每个人的平均数。

    >>> print_overall_grade_average(my_list)
    张三 93.5
    李四 84.0
  • python列表的索引

    和字符串一样,python给列表内置了索引功能,从0开始,1,2,3,…往后排。

    numbers = [2, 5, 15, 20, 25, 30, 25]
    numbers[2] = 100
    numbers[4] += 10
    numbers[-1] -= 5
    numbers[0] = numbers[1]
    print(numbers)
    

    根据以前学的知识,应该能猜到,这个代码的结果是什么。

    [5, 5, 100, 20, 25, 30, 20]

    要把上面列表中的数字一个一个的输出出来,需要用for循环。

    for i in range(len(numbers)):
        print(numbers[i])
    

    这里的range()用于生成一个从0开始,到number长度的数列。

    5
    5
    100
    20
    25
    30
    20
  • python的列表

    python可以用列表来记录一些列数据。这样,一个变量中就可以放更多的内容。

    names = ['张三', '李四', '王五', '这六']
    print(names)
    names.append('那七')   # 追加一个
    print(names)
    if '张三' in names:
        names.remove('张三')   # 移除一个
    else:
        print('张三不存在。')
    print(names)
    
    >>> names = ['张三', '李四', '王五', '这六']
    >>> print(names)
    ['张三', '李四', '王五', '这六']
    >>> names.append('那七') # 追加一个
    >>> print(names)
    ['张三', '李四', '王五', '这六', '那七']
    >>> if '张三' in names:
    ... names.remove('张三') # 移除一个
    ... else:
    ... print('张三不存在。')
    ...
    >>> print(names)
    ['李四', '王五', '这六', '那七']
  • 第七章 R语言中的列表

    列表是一个能组织值、向量、数据框、矩阵等的容器,可以把各种变量按照顺序组织在一起。

    还是以表4-1为例,我们知道,计算只能在数值上,那么,实际上数据框是不适合直接计算的。我们把这个数据框改成列表。

    数据表4-1

    姓名性别英语成绩评定
    张三95优秀
    李四84良好
    王五61合格
    name <- c("张三","李四","王五")
    gender <- c("男","女","男")
    English_score <- c(95,84,61)
    English_grade <- c("优秀","良好","合格")
    # 创建列表
    English_class <- list(name,gender,English_score,English_grade)
    # 显示列表内容
    English_class
    

    结果如下:

    > English_class
    [[1]]
    [1] "张三" "李四" "王五"
    
    [[2]]
    [1] "男" "女" "男"
    
    [[3]]
    [1] 95 84 61
    
    [[4]]
    [1] "优秀" "良好" "合格"

    像其他数据组织形式一样,列表也能命名。

    English_class <- list("姓名" = name, "性别" = gender, "英语成绩" = English_score, "英语评级" = English_grade)
    English_class
    

    结果如下:

    $姓名
    [1] "张三" "李四" "王五"
    
    $性别
    [1] "男" "女" "男"
    
    $英语成绩
    [1] 95 84 61
    
    $英语评级
    [1] "优秀" "良好" "合格"

    数据的提取:

    # 提取列表中的第一个元素,以列表形式展现
    English_class[1]
    
    # 提取列表中的第一个元素,以非列表形式展现,如向量、矩阵
    English_class[[1]]
    
    # 提取列表中第一个元素的第一个元素
    English_class[[1]][1]
    unlist(English_class[1])[1]
    
    # 已经命名的列表,可以用$符号提取元素,也可以直接用名称提取
    English_class["姓名"]
    English_class[["姓名"]]
    English_class$姓名
    English_class$姓名[1]
    

    结果如下:

    > # 提取列表中的第一个元素,以列表形式展现
    > English_class[1]
    $姓名
    [1] "张三" "李四" "王五"
    
    > 
    > # 提取列表中的第一个元素,以非列表形式展现,如向量、矩阵
    > English_class[[1]]
    [1] "张三" "李四" "王五"
    > 
    > # 提取列表中第一个元素的第一个元素
    > English_class[[1]][1]
    [1] "张三"
    > unlist(English_class[1])[1]
     姓名1 
    "张三" 
    > 
    > # 已经命名的列表,可以用$符号提取元素,也可以直接用名称提取
    > English_class["姓名"]
    $姓名
    [1] "张三" "李四" "王五"
    
    > English_class[["姓名"]]
    [1] "张三" "李四" "王五"
    > English_class$姓名
    [1] "张三" "李四" "王五"
    > English_class$姓名[1]
    [1] "张三"

    列表是有长度的,列表中元素的个数即为列表的长度,列表中某个元素中子元素的个数,为该子元素的长度。

    # 列表的长度
    length(English_class)
    # 列表中,子元素"姓名"的长度
    length(English_class$姓名)
    

    结果如下:

    > length(English_class)
    [1] 4
    > length(English_class$姓名)
    [1] 3

    我们可以向列表中添加内容,也就是元素。比如我们要加入数学和语文成绩。

    # 向列表中添加元素
    English_class[[length(English_class) + 1]] <- data.frame("数学成绩" = c(99, 88, 77), "语文成绩" = c(66, 55, 44))
    

    结果如下:

    > English_class
    $姓名
    [1] "张三" "李四" "王五"
    
    $性别
    [1] "男" "女" "男"
    
    $英语成绩
    [1] 95 84 61
    
    $英语评级
    [1] "优秀" "良好" "合格"
    
    [[5]]
      数学成绩 语文成绩
    1       99       66
    2       88       55
    3       77       44

    删除列表中的元素也是非常简单的,类似于向量的操作。

    # 删除元素
    (English_class[-2])   # 删除性别
    (English_class[[3]] <- NULL)   # 删除英语成绩
    English_class
    

    结果如下:

    > (English_class[-2])
    $姓名
    [1] "张三" "李四" "王五"
    
    $英语成绩
    [1] 95 84 61
    
    $英语评级
    [1] "优秀" "良好" "合格"
    
    [[4]]
      数学成绩 语文成绩
    1       99       66
    2       88       55
    3       77       44
    
    > (English_class[[3]] <- NULL)
    NULL
    > English_class
    $姓名
    [1] "张三" "李四" "王五"
    
    $性别
    [1] "男" "女" "男"
    
    $英语评级
    [1] "优秀" "良好" "合格"
    
    [[4]]
      数学成绩 语文成绩
    1       99       66
    2       88       55
    3       77       44

    列表是可以叠加的,把一个列表和另一个列表相连。我们把数学成绩和语文成绩从这个列表中删除,然后放在另一个列表内。

    (English_class[-4])
    other_score <- list("数学成绩" = c(99, 88, 77), "语文成绩" = c(66, 55, 44))
    list_in_list <- list(English_class,other_score)   # list_in_list <- append(English_class,other_score)两者有区别
    list_in_list
    

    结果如下:

    > (English_class[-4])
    $姓名
    [1] "张三" "李四" "王五"
    
    $性别
    [1] "男" "女" "男"
    
    $英语评级
    [1] "优秀" "良好" "合格"
    
    > other_score <- list("数学成绩" = c(99, 88, 77), "语文成绩" = c(66, 55, 44))
    > other_score
    $数学成绩
    [1] 99 88 77
    
    $语文成绩
    [1] 66 55 44
    
    > list_in_list <- list(English_class,other_score)
    > list_in_list
    [[1]]
    [[1]]$姓名
    [1] "张三" "李四" "王五"
    
    [[1]]$性别
    [1] "男" "女" "男"
    
    [[1]]$英语评级
    [1] "优秀" "良好" "合格"
    
    [[2]]
    [[2]]$数学成绩
    [1] 99 88 77
    
    [[2]]$语文成绩
    [1] 66 55 44

    类似的,查看列表的元素,可以用下面的代码。

    list_in_list[[1]]
    list_in_list[[2]]
    list_in_list[[1]]$姓名
    

    结果如下:

    > list_in_list[[1]]
    $姓名
    [1] "张三" "李四" "王五"
    
    $性别
    [1] "男" "女" "男"
    
    $英语评级
    [1] "优秀" "良好" "合格"
    
    > list_in_list[[2]]
    $数学成绩
    [1] 99 88 77
    
    $语文成绩
    [1] 66 55 44
    
    > list_in_list[[1]]$性别
    [1] "男" "女" "男"