튜플 & & & 사전의 수집 파이썬 목록

목록 (리스트)

목록 (리스트) 다른 언어가 가장 일반적으로 사용되는 파이썬과 데이터 구조 중 하나입니다. 파이썬은리스트를 해결하기 위해 대괄호 []를 사용합니다. 목록 변수 (변경 가능) - 당신은 목록의 내용을 변경할 수 있습니다.

리스트는 파이썬의 시퀀스 유형 중 하나 및 지원 인덱싱, 슬라이싱 및 기타 작업이다.

정의 목록

list1 = ['Google', 'Runoob', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]

문자열 지표처럼,리스트의 인덱스는 0에서 시작합니다. 목록은, 조합 등을 가로 챌 수 있습니다.

쿼리 목록

#!/usr/bin/env python
# -*-coding:utf-8-*-

"""
@author:fyh
@time:2019/5/31
"""
names = ['张三', "李四", "王五", "赵六"]

print(names[2])

print(names[0:3])

print(names[0:7])

print(names[-1])

print(names[0:3:1])

print(names[3:0:-1])

print(names[:])

증가 된 데이터

insert 方法用于将对象插入到列表中
append方法则用于在列表末尾追加新的对象
extend 方法可以在列表的末尾一次性追加另一个序列中的多个值。

사례 1 :

names_class2.append('aa')
names_class2.insert(2,'alvin')
print(names_class2)

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]

상기 방법은 확장 된리스트, 오리지널 (+)의 접속 동작이 새로운리스트를 반환되지 수정 연장된다.

사례 2 :

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]
>>>
>>> a + b
[1, 2, 3, 4, 5, 6, 4, 5, 6]
>>> a
[1, 2, 3, 4, 5, 6]

데이터를 수정

names_class2 = ['张三', '李四', '王五', '赵六']

names_class2[3] = '赵七'
names_class2[0:2] = ['su', 'alvin']
print(names_class2)    # ['su', 'alvin', '王五', '赵七']

데이터를 삭제

#!/usr/bin/env python
# -*-coding:utf-8-*-

"""
@author:fyh
@time:2019/5/31
"""
names_class2 = ['张三', '李四', '王五', '赵六']

# 删除第一个元素del
del names_class2[0]

print(names_class2)     # ['李四', '王五', '赵六']

# pop 默认删除的是最后一个元素     注意,pop是有一个返回值的,返回的是被删除的内容
name2 = names_class2.pop()
print(name2)    # 赵六
print(names_class2)     # ['李四', '王五']

# remove  需要指定删除的元素
names_class2.remove('李四')
print(names_class2)

# clear 清空列表
lst1 = [1, 2, 3, 4]
lst1.clear()
print(lst1)     # []

다른 일반적인 작업

카운트

요소 통계가 목록에 표시 횟수

>>> ['to', 'be', 'or', 'not', 'to', 'be'].count('to')
>>> x = [[1,2], 1, 1, [2, 1, [1, 2]]]
>>> x.count(1)
>>> x.count([1,2])

인덱스

값 지수는 목록에서 첫 번째 일치의 위치를 ​​찾으려면

names_class2 = ['张三', '李四', '王五', '赵六', '李四']

print(names_class2.index("李四"))     # 1

역방향에있어서의리스트 내의 요소가 역전

list1 = ['s', 'b', 'c', 'd']
list1.reverse()
print(list1)  # 结果为:['d', 'c', 'b', 's']

종류

정렬 목록을 정렬하는 데 사용

x = [4, 6, 2, 1, 7, 9]
# 正序
x.sort()
print(x)    # [1, 2, 4, 6, 7, 9]
# 倒序
x.sort(reverse=True)
print(x)    # [9, 7, 6, 4, 2, 1]

튜플 (튜플)

  • 튜플들의 목록과 매우 유사 파이썬리스트, 즉 데이터를 조회 할 수 읽기 전용되지만 슬라이싱 동작 튜플들의 목록에 동일하게 적용 할 수 있도록 수정 될 수 없다.
  • 괄호 ()로 작성된 튜플은 요소 쉼표로 구분.
  • 또한,도 튜플은, 튜플은지도에서 키 (및 세트의 구성원)로 사용할 수 있다는 것을 의미 - 목록 및 아니다 튜플 많은 내장 함수 및 반환 값이 존재한다.
tup1 = ('a', 'b', 'c', 'd', 11, 12)
print(tup1[0])
print(tup1[0:3])

print(len(tup1))

포장 풀기 튜플

튜플 풀기가 반복 물체에 적용 할 수있는 유일한 요건 강성 요소의 개수는 반복 가능 객체는 이러한 요소의 허용 가능한 일관성 중성 튜플 번호를 유지해야하다는 것이다. 우리가 표현하는 * 사용하지 않는 여분의 요소를 무시

#!/usr/bin/env python
# -*-coding:utf-8-*-

"""
@author:fyh
@time:2019/7/9
"""

# 平行赋值拆包
a, b = (11, 22)
print(a)    # 11
print(b)    # 22


# 优雅的写法:  数据交换
a, b = b, a

# 用_来替代
_, _, c = (33, 44, 55)
print(c)    # 55

# 用*来替代
a1, *a2, a3 = (11, 22, 33, 44, 55, 66)
print(a1)   # 11
print(a2)   # [22, 33, 44, 55]
print(a3)   # 66

명명 된 튜플

디버거에 큰 도움의 이름으로 클래스 - collections.namedtuple는 속성 이름을 가진 튜플과 클래스의 이름을 구축하는 데 사용할 수있는 공장 기능입니다.

필드 이름은 해당 클래스가 내부에 소비되는 내장 namedtuple와 클래스의 튜플 메모리 인스턴스는 동일합니다. 파이썬 사용하지 때문에 작은 일반 객체 인스턴스와이 예제가 될 것보다 딕셔너리를 이러한 인스턴스의 속성을 저장합니다.

#!/usr/bin/env python
# -*-coding:utf-8-*-

"""
@author:fyh
@time:2019/7/9
"""
import collections

"""
创建一个具名元组需要两个参数, 一个是类名, 另一个是类的各个字段的名字。 后者可以是由数个字符串组成的可迭代对象, 或者是由空格分隔开的字段名组成的字符串。
存放在对应字段里的数据要以一串参数的形式传入到构造函数中(注意, 元组的构造函数却只接受单一的可迭代对象)
你可以通过字段名或者位置来获取一个字段的信息
"""
city = collections.namedtuple('City', 'name country population coordinates')

tokyo = city('Tokyo', 'JP', 36.933, (25.689722, 129.691667))

print(tokyo)        # City(name='Tokyo', country='JP', population=36.933, coordinates=(25.689722, 129.691667))
print(type(tokyo))  # <class '__main__.City'>

print(tokyo.name)   # Tokyo

# 具名元组专有的类属性  _fields 属性是一个包含这个类所有字段名称的元组。
print(tokyo._fields)    # ('name', 'country', 'population', 'coordinates')

# 用 _make() 通过接受一个可迭代对象来生成这个类的一个实例, 它的作用跟City(*delhi_data) 是一样的
delhi_data = ('Delhi NCR', 'IN', 21.935, (28.613889, 77.208889))
delhi = city._make(delhi_data)
print(delhi)

#  _asdict() 把具名元组以 collections.OrderedDict 的形式返回, 我们可以利用它来把元组里的信息友好地呈现出来。
print(delhi._asdict())  # OrderedDict([('name', 'Delhi NCR'), ('country', 'IN'), ('population', 21.935), ('coordinates', (28.613889, 77.208889))])

사전 (DICT)

파이썬 사전의 데이터 저장 키 - 값 쌍 (키 - 값)를 이용하여 맵의 종류 만이다. 키 파이썬 해시 함수 연산은 연산의 결과에 따라 상기 메모리 어드레스 값을 결정하고, 사전은 순서화 저장되고, 키 해쉬되어야한다. 숫자, 문자열, 터플 : 그것은 해시 키는 다음과 같은 불변의 유형이어야합니다 나타낼 수있다.

사전 (사전) 데이터 구조의 기본 파이썬 가장 유연한 타입 이외에리스트에 추가된다. 바인딩 대상의 정렬 된 목록이며, 사전 개체의 정렬되지 않은 컬렉션입니다. 사전의 요소 중에서보다는 액세스를 이동시킴으로써보다 키가 액세스되어 둘 사이의 차이이다.

사전 만들기

#!/usr/bin/env python
# -*-coding:utf-8-*-

"""
@author:fyh
@time:2019/5/31
"""

# 方式一
dic1 = {
    "name": "zhangsan",
    "age": 36,
    "sex": "female"
}
print(dic1)     # {'name': 'zhangsan', 'age': 36, 'sex': 'female'}

# 方式二
dic2 = dict((("name", "abc"), ))
print(dic2)     # {'name': 'abc'}

# 空字典
dic3 = dict()
print(dic3)     # {}

# 或者
dic4 = {}

데이터 사전 추가

#!/usr/bin/env python
# -*-coding:utf-8-*-

"""
@author:fyh
@time:2019/5/31
"""

dic1 = dict()

dic1['name'] = 'zhangsan'
dic1['age'] = 18
print(dic1)     # {'name': 'zhangsan', 'age': 18}


# 如果键不存在于字典中,将会添加键并将值设为default,如果存在,则不会做任何操作
a = dic1.setdefault('name', 'abc')
print(a)    # zhangsan

b = dic1.setdefault('cc', 'dd')
print(b)    # dd

print(dic1)     # {'name': 'zhangsan', 'age': 18, 'cc': 'dd'}

쿼리 데이터 사전

#!/usr/bin/env python
# -*-coding:utf-8-*-

"""
@author:fyh
@time:2019/5/31
"""

dic3 = {'name': 'aa', 'age': 18}

print(dic3['name'])     # aa
# print(dic3['names'])    # 字典中没有这个key时,会报错KeyError: 'names'

print(dic3.get('age', False))   # 18
print(dic3.get('ages', False))  # get不到key时,会返回默认值False

# items 以列表返回可遍历的(键, 值) 元组数组
print(dic3.items())
# keys返回一个迭代器,可以使用 list() 来转换为列表,包含字典的额所有的键
print(dic3.keys())
# 返回一个迭代器,可以使用 list() 来转换为列表,包含字典的所有value
print(dic3.values())

# 用成员运算符 in 判断key是否在字典中
print('name' in dic3)           # python2中用has_key判断  dic3.has_key('name')
print(list(dic3.values()))

데이터 사전을 수정

#!/usr/bin/env python
# -*-coding:utf-8-*-

"""
@author:fyh
@time:2019/5/31
"""
dic3 = {'name': 'aa', 'age': 18}

dic3["name"] = "alivn"
print(dic3)     # {'name': 'alivn', 'age': 18}

# update 把字典dict4的键/值对更新到dict3里
dic4 = {'sex': 'male', 'hobby': 'girl', 'age': 36}
dic3.update(dic4)
print(dic3)     # {'name': 'alivn', 'age': 36, 'sex': 'male', 'hobby': 'girl'}

데이터 사전을 삭제

#!/usr/bin/env python
# -*-coding:utf-8-*-

"""
@author:fyh
@time:2019/5/31
"""
dic3 = {'name': 'aa', 'age': 18}

# 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
aa = dic3.pop('name')
print(aa)   # aa
print(dic3)     # {'age': 18}


# clear()  删除字典内所有元素
dic3.clear()
print(dic3)     # {}

# del 删除字典中指定的键值对
dic4 = {"name": "cc", "age": 19, "male": "sex"}
del dic4["name"]
print(dic4)     # {'age': 19, 'male': 'sex'}

# 删除字典,包括变量的内存空间
del dic4
print(dic4)   # 报错  NameError: name 'dic4' is not defined

기타 작업

#!/usr/bin/env python
# -*-coding:utf-8-*-

"""
@author:fyh
@time:2019/5/31
"""

# fromkeys  创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
d1 = dict.fromkeys(['host1', 'host2', 'host3'], 'Mac')
print(d1)  # {'host1': 'Mac', 'host2': 'Mac', 'host3': 'Mac'}

d1['host1'] = 'xiaomi'
print(d1)
#######
d2 = dict.fromkeys(['host1', 'host2', 'host3'], ['Mac', 'huawei'])
print(d2)
# 结果:{'host1': ['Mac', 'huawei'], 'host2': ['Mac', 'huawei'], 'host3': ['Mac', 'huawei']}

d2['host1'][0] = 'xiaomi'
print(d2)

dic = {"a": "123"}
dic1 = dic.fromkeys("王健林", "王思聪")
print(dic1)  # 结果:{'王': '王思聪', '健': '王思聪', '林': '王思聪'}

사전 탐색

중첩 된 작업의 사전 :

av_catalog = {
    "欧美": {
        "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
        "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
        "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
        "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
    },
    "日韩":{
        "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
    },
    "大陆":{
        "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
    }
}

av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来"
print(av_catalog["大陆"]["1024"])
#ouput  ['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']

사전 탐색 :

#!/usr/bin/env python
# -*-coding:utf-8-*-

"""
@author:fyh
@time:2019/5/31
"""
s
dic1 = {
    "name": "aaa",
    "age": 18,
    'sex': "male"
}

for key, value in dic1.items():
    print(key, value)

"""
结果:
name aaa
age 18
sex male
"""

사례 1 : 세 번째 레벨 메뉴 이송

#!/usr/bin/env python
# -*-coding:utf-8-*-

"""
@author:fyh
@time:2019/5/31
"""

data = {
    '山东': {
        '青岛': ['四方', '黄岛', '崂山', '李沧', '城阳'],
        '济南': ['历城', '槐荫', '高新', '长青', '章丘'],
        '烟台': ['龙口', '莱山', '牟平', '蓬莱', '招远']
    },
    '江苏': {
        '苏州': ['沧浪', '相城', '平江', '吴中', '昆山'],
        '南京': ['白下', '秦淮', '浦口', '栖霞', '江宁'],
        '无锡': ['崇安', '南长', '北塘', '锡山', '江阴']
    },
}

exit_flag = False  # 设置全局变量,用来退出循环,实现任意一级菜单都可以退出
while not exit_flag:
    for i1 in data:  # 读取第一级菜单
        print(i1)
    choice = input('选择进入1,第一级,按q退出:')
    if choice in data:
        while not exit_flag:
            for i2 in data[choice]:  # 读取第二级菜单
                print(i2)
            choice2 = input('选择进入2,按b返回上一级,按q退出:')
            if choice2 in data[choice]:
                while not exit_flag:
                    for i3 in data[choice][choice2]:  # 读取第三级菜单
                        print(i3)
                    choice3 = input('选择进入3,按b返回上一级,按q退出:')
                    if choice3 in data[choice][choice2]:
                        for i4 in data[choice][choice2][choice3]:
                            print(i4)
                        choice4 = input('最后一层,按b返回上一级,按q退出:')
                        if choice4 == 'b':
                            pass  # 占位符
                        if choice4 == 'q':
                            exit_flag = True
                    if choice3 == 'b':
                        break
                    if choice3 == 'q':
                        exit_flag = True
            if choice2 == 'b':
                break
            if choice2 == 'q':
                exit_flag = True
    if choice == 'q':
        exit_flag = True

컬렉션 (설정)

데이터의 순서가 반복되지 조합의 집합입니다 다음과 같이 주요 역할은 다음과 같습니다

  • 디엠 퍼시스는, 목록, 자동으로 무거운 이동 모음이된다
  • 테스트 데이터 불량, 연합 관계 등 두 세트의 교차 관계 전에 테스트

컬렉션 (세트) 함께 파이썬 기본 데이터 형식을 다른 요소들의 세트를 형성한다.

컬렉션의 요소는 해시해야하지만 해시 자체가 설정되어 있지 않습니다

요소 (요소 세트)의 컬렉션 : 세트의 멤버로 이루어지는 (반복 할 수없는)

분류의 컬렉션 :

  • 변수 컬렉션 (설정) : 당신은 추가 요소를 삭제할 수는 비 해시 컬렉션의 다른 요소를 사전 키로 사용도 할 수 없습니다
  • 불변 세트 (frozenset) : 위의 반대로

지인의 컬렉션 :

li = [1, 2, 'a', 'b']
s = set(li)
print(s)  # {1, 2, 'a', 'b'}

li2 = [1, 2, 1, 'a', 'a']
s = set(li2)
print(s)  # {1, 2, 'a'}

이 중첩 된 컬렉션을 허용하지 않습니다 :

li = [[1, 2], 'a', 'b']
s = set(li)  # TypeError: unhashable type: 'list'
print(s)

의 컬렉션을 만들기

자체 구문의 어떤 모음이 없으므로 전용) (공장 메소드 세트 컬렉션 () 및 frozenset 의해 생성 될 수있다

s1 = set('alvin')

s2 = frozenset('yuan')

print(s1, type(s1))  # {'l', 'v', 'i', 'a', 'n'} <class 'set'>
print(s2, type(s2))  # frozenset({'n', 'y', 'a', 'u'}) <class 'frozenset'>

사전 같은 키의 설정 :

lst1 = [1, 2, 4]
# dic1 = {set(lst1): "aa"}    # TypeError: unhashable type: 'set'

# 字典的键可以是不可变集合,可hash的,不能是可变集合
aa = frozenset(lst1)
dic1 = {aa: "bb"}
print(dic1)     # {frozenset({1, 2, 4}): 'bb'}

컬렉션에 대한 액세스

s1 = set('alvin')
print('a' in s1)
print('b' in s1)
# s1[1]  #TypeError: 'set' object does not support indexing

for i in s1:
    print(i)
#
# True
# False
# v
# n
# l
# i

업데이트 컬렉션

s.add ()

s.update ()

s.remove ()

변수의 세트가 업데이트 될 수 있습니다

# s1 = frozenset('alvin')
# s1.add(0)  # AttributeError: 'frozenset' object has no attribute 'add'

s2 = set('alvin')
s2.add('mm')
print(s2)  # {'mm', 'l', 'n', 'a', 'i', 'v'}

s2.update('HO')  # 添加多个元素
print(s2)  # {'mm', 'l', 'n', 'a', 'i', 'H', 'O', 'v'}

s2.remove('l')
print(s2)  # {'mm', 'n', 'a', 'i', 'H', 'O', 'v'}

컬렉션 삭제

델은 컬렉션을 삭제할 수 있습니다

운영자 세트

  • 하지의에서
  • 동일하지에 대응하는 세트 (==,! =)
  • 아들 집, 슈퍼 집
#!/usr/bin/env python
# -*-coding:utf-8-*-

"""
@author:fyh
@time:2019/5/31
"""

# 联合  联合(union)操作与集合的or操作其实等价的,联合符号有个等价的方法,union()。
s1 = set('alvin')
s2 = set('yuan')
s3 = s1|s2
print(s3)    # {'a', 'l', 'i', 'n', 'y', 'v', 'u'}
print(s1.union(s2))   # {'a', 'l', 'i', 'n', 'y', 'v', 'u'} 

# 交集    与集合and等价,交集符号的等价方法是intersection()
a1 = set('alvin')
a2 = set('yuan')
a3 = a1 & a2
print(a3)  # {'n', 'a'}

print(s1.intersection(s2))  # {'n', 'a'}


# 差集    等价方法是difference()
b1 = set('alvin')
b2 = set('yuan')
b3 = b1 - b2
print(b3)  # {'v', 'i', 'l'}

print(s1.difference(s2))  # {'v', 'i', 'l'}


# 对称差集  等价方法symmetric_difference
c1 = set('alvin')
c2 = set('yuan')
c3 = c1 ^ c2
print(c3)  # {'l', 'v', 'y', 'u', 'i'}

print(s1.symmetric_difference(s2))  # {'l', 'v', 'y', 'u', 'i'}

응용 프로그램의 모음

'''最简单的去重方式'''
lis = [1,2,3,4,1,2,3,4]
print(list(set(lis)))    #[1, 2, 3, 4]

추천

출처www.cnblogs.com/fengyuhao/p/11697523.html