Python 面试题思考-1

  • 列表元素去重
    列表元素去重打多使用集合set,而后再使用list进行强制类型转换即可。但是这样会使得去重后的列表元素重新排列,如果我们想让去重后的列表元素依然按原来的顺序排列的话,如下:
   AList = [2, 1, 3, 1, 2]
   BList = list(set(AList))
   print(BList)
   BList.sort(key=AList.index)
   print(BList)
  • 格式化字符串
    %.formatfstring三种,其中fstring是在python3.6中最新出现的。

  • .format:使用较为灵活:

  '{1} {0}'.format('abc', 123)  # 可以不按顺序进行位置映射,输出'123 abc'
  
  '{} {}'.format('abc', 123)  # 可以不指定参数名称,输出'abc 123'
  
  '{1} {0} {1}'.format('abc', 123)  # 参数可以使用多次,输出'123 abc 123'
  
  '{name} {age}'.format(name='tom', age=27)  # 可以按关键字映射,输出'tom 27'
  
  '{person.name} {person.age}'.format(person=person)  # 可以按对象属性映射,输出'tom 27'
  
  '{0[1]} {0[0]}'.format(lst)  # 通过下标映射

你所不知道的Python | 字符串格式化的演进之路

  • fstring:形式上以fF引领的字符串,并在该字符串中使用{}来标明被替换的字段。在功能上与之前的%.format几乎相同,同时性能较强,故推荐使用fstring

    ⚠️:While other string literals always have a constant value, formatted strings are really expressions evaluated at run time.
    (与具有恒定值的其它字符串常量不同,格式化字符串实际上是运行时运算求值的表达式。)
    —— Python Documentation

   >>> name = 'Pluto'
   >>> f'Hello, my name is {name}'
   'Hello, my name is Pluto'
   
  >>> f'My name is {name.lower()}'
  'My name is pluto'
  • 解包
    亦称为unpacking,是将可迭代对象中的元素逐个取出,比如从列表中的切片、取值等操作,而*则可以对应对应一个可变长的解包后的元素。
   >>> a, *b, c = [1,2,3,4]
   >>> a
   1
   >>> b
   [2, 3]
   >>> c
   4

**则专用于字典对象,可以将字典对象解包成关键字参数key=value的格式:

   a = {"A"1,"B"2}
   b = {"C"3,"D"4}
   print({**a,**b})

  • json&dict
    json和`dict在格式上看很相似,但实际上二者存在很大不同,一言以蔽之:

Python 的字典是一种数据结构,JSON 是一种数据格式。

主要区别有如下几点(不完全):
1、json的key只能是字符串,字典可以是任何的hashable;
2、json的key是可以重复的,dict不可以;
3、json的字符串强制使用双引号,dict字符串单、双引号均可;
4、json中的中文是unicode编码;
5、json定义布尔值和空值:true、false、null。python定义布尔值和空值:True、False、None。
6、json的类型是str。

   import json
   dic = {'a': 123, 'b': "456", 'c': "liming"}
   json_str = json.dumps(dic)
   dic2 = json.loads(json_str)
   print(dic)
   print(json_str)
   >>>
   {'c': 'liming', 'b': '456', 'a': 123}
   {"c": "liming", "b": "456", "a": 123}
   

你可能感兴趣的:(列表,字符串,解包,Python,进阶)