1、解压赋值多个变量

采用解构的方法。可迭代对象才可以,变量数量与元素个数要一一对应,或者采用*万能接收。

2、解压可迭代对象赋值多个变量

如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError

去掉最大值和最小值的方法:

  1. def drop_first_last(grades):
  2. first, *middle, last = grades
  3. return avg(middle)
  1. def do_foo(x, y):
  2. print('foo', x, y)
  3. def do_bar(s):
  4. print('bar', s)
  5. for tag, *args in records:
  6. if tag == 'foo':
  7. do_foo(*args)
  8. elif tag == 'bar':
  9. do_bar(*args)

3、保留最后N个元素

  1. deque 双向队列
  2. from collections import deque
  3. 1deque提供了类似list的操作方法:
  4. d=deque()
  5. d.append(3)
  6. 2、两端都可以pop
  7. d.pop()默认删除右边
  8. d.popleft()删除左边的
  9. 3dequemaxlen=20 限制双向队列的长度,当循环的值超过限制数的项时,另一边的项会自动删除
  10. 4、添加list各项到deque
  11. d.extend()默认迭代添加到尾部
  12. d.extendleft()迭代添加到左边
  13. 【在队列两端插入或删除元素时间复杂度都是 O(1) ,区别于列表,在列表的开头插入或删除元素的时间复杂度为 O(N) 。】

4、查找最大或最小的N个元素

  1. import heapq
  2. #该模块提供了堆排序算法的实现。堆是二叉树,最大堆中父节点大于或等于两个子节点,最小堆父节点小于或等于两个子节点。
  3. #创建堆
  4. 1、空列表。使用heapq.heappush()函数把值加入堆中
  5. 2、使用heap.heapify(list)转换列表成为堆结构
  6. 【堆创建好后,可以通过`heapq.heappop() 函数弹出堆中最小值
  7. 如果需要删除堆中最小元素并加入一个元素,可以使用heapq.heaprepalce() 函数】
  8. 【获取堆最大或最小值
  9. 如果需要获取堆中最大或最小的范围值,则可以使用heapq.nlargest() 或heapq.nsmallest() 函数】
  10. 这两个函数还接受一个key参数,用于dict或其他数据结构类型使用
  11. import heapq
  12. from pprint import pprint
  13. portfolio = [
  14. {'name': 'IBM', 'shares': 100, 'price': 91.1},
  15. {'name': 'AAPL', 'shares': 50, 'price': 543.22},
  16. {'name': 'FB', 'shares': 200, 'price': 21.09},
  17. {'name': 'HPQ', 'shares': 35, 'price': 31.75},
  18. {'name': 'YHOO', 'shares': 45, 'price': 16.35},
  19. {'name': 'ACME', 'shares': 75, 'price': 115.65}
  20. ]
  21. cheap = heapq.nsmallest(3, portfolio, key=lambda s: s['price'])
  22. expensive = heapq.nlargest(3, portfolio, key=lambda s: s['price'])
  23. pprint(cheap)
  24. pprint(expensive)
  25. 堆最重要的特性就是,heap[0]总是最小的那个元素,此外,接下来的最小元素可以一次通过heapq.heappop()的方法轻松的找到。该方法会将第一个元素(最小的)弹出,然后以第二小的元素取而代之。

5、实现一个优先级队列

6、字典中的键映射多个值

怎样实现一个键对应多个值的字典(也叫 multidict)?

  1. 使用 `collections` 模块中的 `defaultdict` 来构造这样的字典。 `defaultdict` 的一个特征是它会自动初始化每个 `key` 刚开始对应的值
  2. from collections import defaultdict
  3. d = defaultdict(list)
  4. d['a'].append(1)
  5. d['a'].append(2)
  6. d['b'].append(4)
  7. d = defaultdict(set)
  8. d['a'].add(1)
  9. d['a'].add(2)
  10. d['b'].add(4)
  11. 字典中一个键对应多个值方法两种:
  12. 1、使用defaultdict()
  13. 2setdefault()
  14. d = {} # 一个普通的字典
  15. d.setdefault('a', []).append(1)
  16. d.setdefault('a', []).append(2)
  17. d.setdefault('b', []).append(4)

7、字典排序

8、字典运算

字典执行计算操作(最大值/最小值/排序)

  1. prices = {
  2. 'ACME': 45.23,
  3. 'AAPL': 612.78,
  4. 'IBM': 205.55,
  5. 'HPQ': 37.20,
  6. 'FB': 10.75
  7. }
  8. 采用zip()
  9. print(max(zip(prices.values(),prices.keys()))) 最大值
  10. zip可以把字典的键和值相互跌倒
  11. print(min(zip(prices.values(),prices.keys()))) 最小值
  12. 字典的值排序:
  13. print(sorted(zip(prices.values(),prices.keys())))
  14. 【注意的是 zip() 函数创建的是一个只能访问一次的迭代器。】
  15. min() max() 函数中提供 key 函数参数来获取最小值或最大值对应的键的信息】
  16. min(prices, key=lambda k: prices[k]) # Returns 'FB'
  17. max(prices, key=lambda k: prices[k]) # Returns 'AAPL'

9、查找两字典的相同点

  1. a = {
  2. 'x' : 1,
  3. 'y' : 2,
  4. 'z' : 3
  5. }
  6. b = {
  7. 'w' : 10,
  8. 'x' : 11,
  9. 'y' : 2
  10. }
  11. print(a.keys() & b.keys()) 查找字典的键相同的
  12. print(a.items() & b.items()) 查找字典的值相同的
  13. 【假如你想以现有字典构造一个排除几个指定键的新字典。 下面利用字典推导来实现这样的需求:】
  14. c = {key:a[key] for key in a.keys() - {'z', 'w'}}
  15. c = { key for key in a.keys() - {"x"}}
  16. print(c) 采用集合的差集,然后转成字典。 #{'z': 3, 'y': 2}
  17. c = { key :a[key ]for key in a.keys() - {"x"}}
  18. print(c) #{'z': 3, 'y': 2}

10、删除序列相同元素并保持顺序

  1. 序列上的值都是可哈希类型【不可变类型】
  2. def dedupe(items):
  3. seen = set()
  4. for item in items:
  5. if item not in seen:
  6. yield item
  7. seen.add(item)
  8. >>> a = [1, 5, 2, 1, 9, 1, 5, 10]
  9. >>> list(dedupe(a))
  10. [1, 5, 2, 9, 10]
  11. >>>
  12. 消除元素不可哈希(比如 dict 类型)的序列中重复元素的话
  13. def dedupe(items, key=None):
  14. seen = set()
  15. for item in items:
  16. val = item if key is None else key(item)
  17. print(val)
  18. if val not in seen:
  19. # print(item)
  20. yield item #因为下面强转成list,所以,生成器中的元素会一一打印出来,其实是python内部帮我们实现了for循环
  21. seen.add(val)
  22. a = [ {'x':1, 'y':2}, {'x':1, 'y':3}, {'x':1, 'y':2}, {'x':2, 'y':4}]
  23. print(list(dedupe(a,key = lambda d:(d["x"],d["y"]))))

11、命名切片

  1. 假定你要从一个记录(比如文件或其他类似格式)中的某些固定位置提取字段
  2. ###### 0123456789012345678901234567890123456789012345678901234567890'
  3. record = '....................100 .......513.25 ..........'
  4. cost = int(record[20:23]) * float(record[31:37])
  5. 改进版:
  6. slice() 函数实现切片对象,主要用在切片操作函数里的参数传递。
  7. """
  8. class slice(stop)
  9. class slice(start, stop[, step])
  10. 参数说明:
  11. start -- 起始位置
  12. stop -- 结束位置
  13. step -- 间距
  14. """

  15. SHARES = slice(20, 23)
  16. PRICE = slice(31, 37)
  17. cost = int(record[SHARES]) * float(record[PRICE])
  18. """
  19. 还可以通过调用切片的 indices(size) 方法将它映射到一个已知大小的序列上。 这个方法返回一个三元组 (start, stop, step) ,所有的值都会被缩小,直到适合这个已知序列的边界为止。 这样,使用的时就不会出现 IndexError 异常
  20. """
  21. s = "helloword"
  22. a = slice(2,10,2)
  23. print(a.indices(len(s)))
  24. for i in range(*a.indices(len(s))):
  25. print(s[i])

12、序列中出现次数最多的元素

  1. 你有一个单词列表并且想找出哪个单词出现频率最高
  2. words = [
  3. 'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes',
  4. 'the', 'eyes', 'the', 'eyes', 'the', 'eyes', 'not', 'around', 'the',
  5. 'eyes', "don't", 'look', 'around', 'the', 'eyes', 'look', 'into',
  6. 'my', 'eyes', "you're", 'under'
  7. ]
  8. from collections import Counter
  9. wored_counts = Counter(words)
  10. #得到的是Counter({'eyes': 8, 'the': 5, 'look': 4, 'into': 3, 'my': 3, 'around': 2, 'not': 1, "don't": 1, "you're": 1, 'under': 1})
  11. 将单词出现频率统计出来并且,转换成Counter的类,高仿字典,可以使用dict转成字典。
  12. print(dict(wored_counts))
  13. top_w = wored_counts.most_common(3) 统计出现次数最多的三个三次
  14. print(dict(top_w))
  15. #{'eyes': 8, 'the': 5, 'look': 4}
  1. Counter 实例一个鲜为人知的特性是它们可以很容易的跟数学运算操作相结合
  2. morewords = ['why','are','you','not','looking','in','my','eyes']
  3. words = [
  4. 'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes',
  5. 'the', 'eyes', 'the', 'eyes', 'the', 'eyes', 'not', 'around', 'the',
  6. 'eyes', "don't", 'look', 'around', 'the', 'eyes', 'look', 'into',
  7. 'my', 'eyes', "you're", 'under'
  8. ]
  9. >>> a = Counter(words)
  10. >>> b = Counter(morewords)
  11. >>> a
  12. Counter({'eyes': 8, 'the': 5, 'look': 4, 'into': 3, 'my': 3, 'around': 2,
  13. "you're": 1, "don't": 1, 'under': 1, 'not': 1})
  14. >>> b
  15. Counter({'eyes': 1, 'looking': 1, 'are': 1, 'in': 1, 'not': 1, 'you': 1,
  16. 'my': 1, 'why': 1})
  17. >>> # Combine counts
  18. >>> c = a + b
  19. >>> c
  20. Counter({'eyes': 9, 'the': 5, 'look': 4, 'my': 4, 'into': 3, 'not': 2,
  21. 'around': 2, "you're": 1, "don't": 1, 'in': 1, 'why': 1,
  22. 'looking': 1, 'are': 1, 'under': 1, 'you': 1})
  23. >>> # Subtract counts
  24. >>> d = a - b
  25. >>> d
  26. Counter({'eyes': 7, 'the': 5, 'look': 4, 'into': 3, 'my': 2, 'around': 2,
  27. "you're": 1, "don't": 1, 'under': 1})
  28. >>>

13、通过某个关键字排序一个字典的列表

  1. 你有一个字典列表,你想根据某个或某几个字典字段来排序这个列表
  2. #通过使用 operator 模块的 itemgetter 函数,可以非常容易的排序这样的数据结构
  3. rows = [
  4. {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
  5. {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
  6. {'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
  7. {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
  8. ]
  9. 根据任意的字典字段来排序输入结果行是很容易实现的,代码示例:
  10. from operator import itemgetter
  11. rows_by_fname = sorted(rows, key=itemgetter('fname'))
  12. rows_by_uid = sorted(rows, key=itemgetter('uid'))
  13. print(rows_by_fname)
  14. print(rows_by_uid)
  15. 代码的输出如下:
  16. [{'fname': 'Big', 'uid': 1004, 'lname': 'Jones'},
  17. {'fname': 'Brian', 'uid': 1003, 'lname': 'Jones'},
  18. {'fname': 'David', 'uid': 1002, 'lname': 'Beazley'},
  19. {'fname': 'John', 'uid': 1001, 'lname': 'Cleese'}]
  20. [{'fname': 'John', 'uid': 1001, 'lname': 'Cleese'},
  21. {'fname': 'David', 'uid': 1002, 'lname': 'Beazley'},
  22. {'fname': 'Brian', 'uid': 1003, 'lname': 'Jones'},
  23. {'fname': 'Big', 'uid': 1004, 'lname': 'Jones'}]
  24. itemgetter() 函数也支持多个 keys
  25. rows_by_lfname = sorted(rows, key=itemgetter('lname','fname'))
  26. print(rows_by_lfname)
  27. itemgetter()可以使用lambda代替
  28. rows_by_fname = sorted(rows, key=lambda r: r['fname'])
  29. rows_by_lfname = sorted(rows, key=lambda r: (r['lname'],r['fname']))
  30. 优先使用itemgetter()比lambda效率快
  31. 还可以适用:
  32. >>> min(rows, key=itemgetter('uid'))
  33. {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}
  34. >>> max(rows, key=itemgetter('uid'))
  35. {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
  36. 练习:
  37. rows = [
  38. {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
  39. {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
  40. {'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
  41. {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
  42. ]
  43. from operator import itemgetter
  44. print(sorted(rows,key = itemgetter("fname","uid")))

14、通过某个字段将记录分组

  1. itertools.groupby() 函数对于这样的数据分组操作非常实用
  2. rows = [
  3. {'address': '5412 N CLARK', 'date': '07/01/2012'},
  4. {'address': '5148 N CLARK', 'date': '07/04/2012'},
  5. {'address': '5800 E 58TH', 'date': '07/02/2012'},
  6. {'address': '2122 N CLARK', 'date': '07/03/2012'},
  7. {'address': '5645 N RAVENSWOOD', 'date': '07/02/2012'},
  8. {'address': '1060 W ADDISON', 'date': '07/02/2012'},
  9. {'address': '4801 N BROADWAY', 'date': '07/01/2012'},
  10. {'address': '1039 W GRANVILLE', 'date': '07/04/2012'},
  11. ]
  12. from operator import itemgetter
  13. from itertools import groupby
  14. rows.sort(key = itemgetter("date"))
  15. for date,items in groupby(rows,key=itemgetter("date")):
  16. print(date)
  17. for i in items:
  18. print(" ",i)
  19. #结果:
  20. 07/01/2012
  21. {'address': '5412 N CLARK', 'date': '07/01/2012'}
  22. {'address': '4801 N BROADWAY', 'date': '07/01/2012'}
  23. 07/02/2012
  24. {'address': '5800 E 58TH', 'date': '07/02/2012'}
  25. {'address': '5645 N RAVENSWOOD', 'date': '07/02/2012'}
  26. {'address': '1060 W ADDISON', 'date': '07/02/2012'}
  27. 07/03/2012
  28. {'address': '2122 N CLARK', 'date': '07/03/2012'}
  29. 07/04/2012
  30. {'address': '5148 N CLARK', 'date': '07/04/2012'}
  31. {'address': '1039 W GRANVILLE', 'date': '07/04/2012'}
  32. 总结:
  33. groupby() 函数扫描整个序列并且查找连续相同值(或者根据指定 key 函数返回值相同)的元素序列。 在每次迭代的时候,它会返回一个值和一个迭代器对象, 这个迭代器对象可以生成元素值全部等于上面那个值的组中所有对象。

15、过滤序列元素

  1. 数据序列,想利用一些规则从中提取出需要的值或者是缩短序列
  2. 方法一:
  3. 列表推导式
  4. 缺点占用内存
  5. 方法二:
  6. 生成器
  7. 方法三:
  8. 内置函数 filter()
  9. 【过滤操作的一个变种就是将不符合条件的值用新的值代替,而不是丢弃它们。】
  10. 采用:
  11. clip_neg = [n if n > 0 else 0 for n in mylist]
  12. 过滤工具:
  13. itertools.compress()
  14. 它以一个 iterable 对象和一个相对应的 Boolean 选择器序列作为输入参数。 然后输出 iterable 对象中对应选择器为 True 的元素。 当你需要用另外一个相关联的序列来过滤某个序列的时候,这个函数是非常有用的
  15. addresses = [
  16. '5412 N CLARK',
  17. '5148 N CLARK',
  18. '5800 E 58TH',
  19. '2122 N CLARK',
  20. '5645 N RAVENSWOOD',
  21. '1060 W ADDISON',
  22. '4801 N BROADWAY',
  23. '1039 W GRANVILLE',
  24. ]
  25. counts = [ 0, 3, 10, 4, 1, 7, 6, 1]
  26. >>> from itertools import compress
  27. >>> more5 = [n > 5 for n in counts]
  28. >>> more5
  29. [False, False, True, False, False, True, True, False]
  30. >>> list(compress(addresses, more5))
  31. ['5800 E 58TH', '1060 W ADDISON', '4801 N BROADWAY']
  32. 这里的关键点在于先创建一个 Boolean 序列,指示哪些元素符合条件。 然后 compress() 函数根据这个序列去选择输出对应位置为 True 的元素。

16、字典中提取子集

  1. 构造一个字典,它是另外一个字典的子集
  2. 方法一:
  3. 字典推导式
  4. prices = {
  5. 'ACME': 45.23,
  6. 'AAPL': 612.78,
  7. 'IBM': 205.55,
  8. 'HPQ': 37.20,
  9. 'FB': 10.75
  10. }
  11. # Make a dictionary of all prices over 200
  12. p1 = {key: value for key, value in prices.items() if value > 200}
  13. # Make a dictionary of tech stocks
  14. tech_names = {'AAPL', 'IBM', 'HPQ', 'MSFT'}
  15. p2 = {key: value for key, value in prices.items() if key in tech_names}
  16. 方法二:
  17. 元祖传递给dict()函数
  18. p1 = dict((key, value) for key, value in prices.items() if value > 200)
  19. 方法三:
  20. # Make a dictionary of tech stocks
  21. tech_names = { 'AAPL', 'IBM', 'HPQ', 'MSFT' }
  22. p2 = { key:prices[key] for key in prices.keys() & tech_names }
  23. 性能比较,方法一>方法三>方法二

17、映射名称到序列元素

  1. #问题“
  2. """
  3. 你有一段通过下标访问列表或者元组中元素的代码,但是这样有时候会使得你的代码难以阅读, 于是你想通过名称来访问元素。
  4. """
  5. 这个函数实际上是一个返回 Python 中标准元组类型子类的一个工厂方法。 你需要传递一个类型名和你需要的字段给它,然后它就会返回一个类,你可以初始化这个类,为你定义的字段传递值等
  6. 代码实例:
  7. sub = namedtuple("sub",['addr', 'joined'])
  8. subb = sub('jonesy@example.com', '2012-10-19')
  9. print(list(subb))
  1. 命名元组(利用 collections 模块中的 namedtuple 函数)
  2. >>> from collections import namedtuple
  3. >>> Student = namedtuple('Student', ['name', 'age', 'sex', 'email'])
  4. >>> s = Student('Jim', 21, 'male', '123@qq.com')
  5. >>> s.name
  6. 'Jim'
  7. >>> s.age
  8. 21
  9. namedtuple 函数这里接收两个参数,第一个参数为要创建类型的名称,第二个参数是一个列表,代表了每一个索引的名字。当建立完这个 Student 类之后,就可以使用正常的构造方法来构造新的对象如 s,并且可以直接通过访问属性的方式来访问所需要的值。
  10. 此时使用isinstance函数对比内置的tuple
  11. >>> isinstance(s, tuple)
  12. True
  13. 可见用namedtuple构造出来的类其本质就是一个tuple元组,所以仍然可以使用下标的方式来访问属性。并且在任何要求类型为元组的地方都可以使用这个namedtuple
  14. 命名元祖中的值不可以修改。
  15. 真的需要改变属性的值,那么可以使用命名元组实例的 _replace() 方法, 它会创建一个全新的命名元组并将对应的字段用新的值取代。
  16. >>> s = s._replace(shares=75)
  17. >>> s
  18. Stock(name='ACME', shares=75, price=123.45)
  19. >>>
  20. _replace() 方法还有一个很有用的特性就是当你的命名元组拥有可选或者缺失字段时候, 它是一个非常方便的填充数据的方法。 你可以先创建一个包含缺省值的原型元组,然后使用 _replace() 方法创建新的值被更新过的实例】
  21. from collections import namedtuple
  22. Stock = namedtuple('Stock', ['name', 'shares', 'price', 'date', 'time'])
  23. # Create a prototype instance
  24. stock_prototype = Stock('', 0, 0.0, None, None)
  25. # Function to convert a dictionary to a Stock
  26. def dict_to_stock(s):
  27. return stock_prototype._replace(**s)
  28. 使用方法:
  29. >>> a = {'name': 'ACME', 'shares': 100, 'price': 123.45}
  30. >>> dict_to_stock(a)
  31. Stock(name='ACME', shares=100, price=123.45, date=None, time=None)
  32. >>> b = {'name': 'ACME', 'shares': 100, 'price': 123.45, 'date': '12/17/2012'}
  33. >>> dict_to_stock(b)
  34. Stock(name='ACME', shares=100, price=123.45, date='12/17/2012', time=None)
  35. >>>

18、转换并同时计算数据

  1. 计算平方和:
  2. nums = [1, 2, 3, 4, 5]
  3. s = sum(x * x for x in nums) 形成一个生成器
  4. 聚集函数:
  5. max min sum

19、合并多个字典或映射

  1. 合并两个字典:
  2. a = {'x': 1, 'z': 3 }
  3. b = {'y': 2, 'z': 4 }
  4. 两个字典中执行查找操作(比如先从 a 中找,如果找不到再在 b 中找)。 一个非常简单的解决方案就是使用 collections 模块中的 ChainMap 类。
  5. from collections import ChainMap
  6. c = ChainMap(a,b)
  7. print(c['x']) # Outputs 1 (from a)
  8. print(c['y']) # Outputs 2 (from b)
  9. print(c['z']) # Outputs 3 (from a)
  10. 讲解:
  11. 一个 ChainMap 接受多个字典并将它们在逻辑上变为一个字典。 然后,这些字典并不是真的合并在一起了, ChainMap 类只是在内部创建了一个容纳这些字典的列表 并重新定义了一些常见的字典操作来遍历这个列表。大部分字典操作都是可以正常使用的
  12. >>> len(c)
  13. 3
  14. >>> list(c.keys())
  15. ['x', 'y', 'z']
  16. >>> list(c.values())
  17. [1, 2, 3]
  18. >>>
  19. 如果出现重复键,那么第一次出现的映射值会被返回。 因此,例子程序中的 c['z'] 总是会返回字典 a 中对应的值,而不是 b 中对应的值。
  1. update
  2. >>> a = {'x': 1, 'z': 3 }
  3. >>> b = {'y': 2, 'z': 4 }
  4. >>> merged = dict(b)
  5. >>> merged.update(a)
  6. >>> merged['x']
  7. 1
  8. >>> merged['y']
  9. 2
  10. >>> merged['z']
  11. 3
  12. >>>
  13. 它需要你创建一个完全不同的字典对象(或者是破坏现有字典结构)。 同时,如果原字典做了更新,这种改变不会反应到新的合并字典中去。比如:
  14. >>> a['x'] = 13
  15. >>> merged['x']
  16. 1
  17. 使用chainMap的优点:
  18. ChainMap 使用原来的字典,它自己不创建新的字典。所以它并不会产生上面所说的结果,比如:
  19. >>> a = {'x': 1, 'z': 3 }
  20. >>> b = {'y': 2, 'z': 4 }
  21. >>> merged = ChainMap(a, b)
  22. >>> merged['x']
  23. 1
  24. >>> a['x'] = 42
  25. >>> merged['x'] # Notice change to merged dicts
  26. 42
  27. >>>

python之数据解构和算法进阶的更多相关文章

  1. 深入理解ES6之—数据解构

    一 对象解构 对象解构语法在赋值语句的左侧使用了对象字面量 let node = { type: true, name: false } //既声明又赋值 let { type, name } = n ...

  2. 03.python封装与解构

    封装与结构 基本概念 t1 = 1, 2 print(type(t1)) # 什么类型 t2 = (1, 2) print(type(t2)) Python等式右侧出现逗号分隔的多值的时候,就会将这几 ...

  3. dict字典常用方法总结,数据解构(解包)

    dict {'name':'holle'}字典存储大量关联型数据,可迭代的,最多只有200个键.查询数据速度非常快,符合二分查找(有100个数比如找75会先找到50然后判断,所以2^7次方7次即可找到 ...

  4. kotlin数据解构

    fun main(arg: Array<String>) { val person = person("tom") var (name) = person//解构 pr ...

  5. 简单的axios请求返回数据解构赋值

    本地  data.json 文件 { "name": "大熊", "age": 18, "fnc": [ 1, 2, 3 ...

  6. ES6解构赋值

    前面的话 我们经常定义许多对象和数组,然后有组织地从中提取相关的信息片段.在ES6中添加了可以简化这种任务的新特性:解构.解构是一种打破数据结构,将其拆分为更小部分的过程.本文将详细介绍ES6解构赋值 ...

  7. ES6里的解构赋值

    我们经常定义许多对象和数组,然后有组织地从中提取相关的信息片段.在ES6中添加了可以简化这种任务的新特性:解构.解构是一种打破数据结构,将其拆分为更小部分的过程. 一.引入背景 在ES5中,开发者们为 ...

  8. python 集合详解

    字符串 一个个字符组成的有序的序列,时字符的集合 使用单引,双引,三引 引住的字符序列 字符时不可变的对象 bytes定义 bytes不可变字节序列 使用b前缀定义 只允许基本ASCII使用字符形式 ...

  9. ES6 - Note2:解构赋值

    ES6的解构赋值就是利用模式匹配从按照一定模式的数组或者对象中提取值赋值给变量. 1.数组的解构赋值 在ES6以前,变量的赋值是直接指定的,以后可以这么来写,如下所示 let [a,b,c] = [1 ...

随机推荐

  1. from表格

    目录 from 功能: 表单元素 表单工作原理: input 属性说明: select标签 属性说明: label标签 属性说明: from 功能: 表单用于向服务器传输数据,从而实现用户与Web服务 ...

  2. gethostname、gethostbyname

    gethostname():返回本地主机的标准主机名 原型: #include<unistd.h> int gethostname(char *name, size_t len); 参数说 ...

  3. linux实现pwd

    版本1: 调用系统接口getcwd,实现路径打印. /*** ***文件名:1_mypwd.c ***描述:通过系统函数getcwd实现pwd命令 ***/ #include<stdio.h&g ...

  4. python pycryptodome 加密解密

    pip3 install pycryptodome my_private_rsa_key.bin -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDlOJu ...

  5. Pycharm 导入Selenium,出现错误

    问题 导入Selenium,出现红色波浪线. 解决 点击Pycharm左上角File>setting>Project Interpreter,双击PIP,搜索栏搜索Selenium 然后选 ...

  6. 从技术角度看Pacs厂商

    天健PACS较早从事影像医院处理系统,为国外系统或设备以OEM方式提供软件模块.天健的PACS里面三维重建.容积重建.血管分析.虚拟腔镜.头部灌注等部分是用西安盈谷科技的,手术麻醉和重症监护系统是奥迪 ...

  7. Python中如何计算字符串里面某一个字符出现的次数?

    一个突发奇想,想解决一个学习中的行业痛点,让我又再度拾起了Python编程语言的学习.   刚学两天,今天遇到一个题,该题难度不高,但有一点关键点在网上找不到,网上也没有相关的答案,于是我只好千辛万苦 ...

  8. 【Docker】容器与系统时间同步

    宿主机时间 [root@slave-1 ~]# date Fri May 12 11:20:30 CST 2017 容器时间 [root@slave-1 ~]# docker exec -ti 879 ...

  9. 破解NFC卡

    目录 概念 各种卡 IC卡存储器结构 破解工具 破解NFC卡 概念 各种卡 ID卡 工作在低频(125Khz) ID卡 特点 EM4XX系列,多为EM4100/EM4102卡 常用的固化ID卡,出厂固 ...

  10. centos7.6使用 supervisor 对filebeat7.3.1进程进行管理

    centos7.6使用 supervisor 对filebeat7.3.1进程进行管理 Supervisor 是一个 Python 开发的 client/server 系统,可以管理和监控类 UNIX ...