zoukankan      html  css  js  c++  java
  • Python数据结构与算法相关问题与解决技巧

     

    1.如何在列表, 字典, 集合中根据条件筛选数据

    In [1]:
    from random import randint
    
    In [2]:
    data = [randint(-10,10) for _ in range(10)]
    
    In [3]:
    data
    
    Out[3]:
    [4, 4, -5, 6, 7, 10, 5, -7, -6, -9]
    In [4]:
    # 筛选出列表中大于0的元素
    
    # 使用filter函数
    list(filter(lambda x:x>=0,data))
    
    Out[4]:
    [4, 4, 6, 7, 10, 5]
    In [5]:
    # 列表解析
    [x for x in data if x >= 0]
    
    Out[5]:
    [4, 4, 6, 7, 10, 5]
    In [6]:
    timeit list(filter(lambda x:x>=0,data))
    
     
    1.56 µs ± 33.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    
    In [7]:
    timeit [x for x in data if x >= 0]
    
     
    625 ns ± 26.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    
    In [8]:
    # 字典解析
    d = {x:randint(60,100) for x in range(1,21)}
    
    In [9]:
    d
    
    Out[9]:
    {1: 87,
     2: 86,
     3: 97,
     4: 92,
     5: 79,
     6: 90,
     7: 78,
     8: 97,
     9: 63,
     10: 97,
     11: 91,
     12: 69,
     13: 86,
     14: 83,
     15: 84,
     16: 83,
     17: 70,
     18: 86,
     19: 93,
     20: 88}
    In [10]:
    {k:v for k,v in d.items() if v > 90 }
    
    Out[10]:
    {3: 97, 4: 92, 8: 97, 10: 97, 11: 91, 19: 93}
    In [11]:
    # 集合解析
    s = set(data)
    
    In [12]:
    s
    
    Out[12]:
    {-9, -7, -6, -5, 4, 5, 6, 7, 10}
    In [13]:
    {x for x in s if x % 2 == 0}
    
    Out[13]:
    {-6, 4, 6, 10}
     

    2.如何为元组中的每个元素命名, 提高程序可读性

    In [14]:
    #方案一,定义一系列数值常量
    NAME,AGE,SEX,EMAIL = range(4)
    
    In [15]:
    student = ('Tom','16','male','tom@gmail.com')
    
    In [16]:
    student[NAME]
    
    Out[16]:
    'Tom'
    In [17]:
    #方案二,使用namedtuple
    from collections import namedtuple
    
    In [18]:
    Student = namedtuple('Student',['name','age','sex','email'])
    
    In [19]:
    #位置传参
    s = Student('Tom','16','male','tom@gmail.com')
    
    In [20]:
    s
    
    Out[20]:
    Student(name='Tom', age='16', sex='male', email='tom@gmail.com')
    In [21]:
    #关键字传参
    s2 = Student(name='Tom',age='16',sex='male',email='tom@gmail.com')
    
    In [22]:
    s2
    
    Out[22]:
    Student(name='Tom', age='16', sex='male', email='tom@gmail.com')
    In [23]:
    s.name
    
    Out[23]:
    'Tom'
    In [24]:
    s.email
    
    Out[24]:
    'tom@gmail.com'
    In [25]:
    isinstance(s,tuple)
    
    Out[25]:
    True
     

    3.如何统计序列中元素的出现频度

    In [26]:
    from random import randint
    
    In [27]:
    data = [randint(0,20) for _ in range(30)]
    
    In [28]:
    data
    
    Out[28]:
    [8,
     11,
     16,
     10,
     11,
     10,
     13,
     6,
     20,
     15,
     19,
     13,
     4,
     14,
     8,
     18,
     9,
     8,
     9,
     19,
     11,
     15,
     9,
     4,
     2,
     11,
     11,
     16,
     3,
     19]
    In [29]:
    #fromkeys:用于创建并返回一个新的字典。两个参数:第一个是字典的键,第二个(可选)是传入键的值,默认为None。
    c = dict.fromkeys(data,0)
    
    In [30]:
    c
    
    Out[30]:
    {8: 0,
     11: 0,
     16: 0,
     10: 0,
     13: 0,
     6: 0,
     20: 0,
     15: 0,
     19: 0,
     4: 0,
     14: 0,
     18: 0,
     9: 0,
     2: 0,
     3: 0}
    In [31]:
    for x in data:
        c[x] += 1
    
    In [32]:
    c
    
    Out[32]:
    {8: 3,
     11: 5,
     16: 2,
     10: 2,
     13: 2,
     6: 1,
     20: 1,
     15: 2,
     19: 3,
     4: 2,
     14: 1,
     18: 1,
     9: 3,
     2: 1,
     3: 1}
    In [33]:
    # 使用Counter
    from collections import Counter
    
    In [34]:
    c2 = Counter(data)
    
    In [35]:
    c2
    
    Out[35]:
    Counter({8: 3,
             11: 5,
             16: 2,
             10: 2,
             13: 2,
             6: 1,
             20: 1,
             15: 2,
             19: 3,
             4: 2,
             14: 1,
             18: 1,
             9: 3,
             2: 1,
             3: 1})
    In [36]:
    #找出频率出现最高的3个元素
    c2.most_common(3)
    
    Out[36]:
    [(11, 5), (8, 3), (19, 3)]
    In [37]:
    import re
    
    In [38]:
    txt = open('Alice.txt').read()
    
    In [39]:
    c3 = Counter(re.split('\W+',txt))
    
    In [40]:
    c3
    
    Out[40]:
    Counter({'Alice': 19,
             'was': 38,
             'beginning': 1,
             'to': 44,
             'get': 5,
             'very': 12,
             'tired': 1,
             'of': 25,
             'sitting': 1,
             'by': 6,
             'her': 15,
             'sisteron': 1,
             'the': 58,
             'bank': 1,
             'and': 44,
             'having': 1,
             'nothing': 5,
             'do': 5,
             'once': 1,
             'or': 9,
             'twice': 1,
             'she': 45,
             'hadpeeped': 1,
             'into': 4,
             'book': 4,
             'sister': 1,
             'reading': 1,
             'but': 14,
             'it': 45,
             'had': 12,
             'nopictures': 1,
             'conversations': 1,
             'in': 17,
             'what': 6,
             'is': 4,
             'use': 3,
             'a': 36,
             'thought': 5,
             'without': 2,
             'pictures': 2,
             'conversation': 1,
             'So': 1,
             'considering': 1,
             'own': 1,
             'mind': 2,
             'as': 13,
             'well': 5,
             'could': 5,
             'for': 11,
             'hot': 3,
             'day': 1,
             'made': 2,
             'feel': 1,
             'sleepy': 2,
             'stupid': 1,
             'whetherthe': 1,
             'pleasure': 1,
             'making': 1,
             'daisy': 1,
             'chain': 1,
             'would': 5,
             'be': 8,
             'worth': 1,
             'troubleof': 1,
             'getting': 3,
             'up': 9,
             'picking': 1,
             'daisies': 1,
             'when': 6,
             'suddenly': 4,
             'WhiteRabbit': 1,
             'with': 10,
             'pink': 1,
             'eyes': 1,
             'ran': 2,
             'close': 2,
             'There': 6,
             'so': 8,
             'VERY': 4,
             'remarkable': 1,
             'that': 18,
             'nor': 1,
             'did': 3,
             'Alicethink': 1,
             'much': 5,
             'out': 8,
             'way': 5,
             'hear': 2,
             'Rabbit': 4,
             'say': 4,
             'toitself': 1,
             'Oh': 4,
             'dear': 3,
             'I': 21,
             'shall': 3,
             'late': 1,
             'thoughtit': 1,
             'over': 3,
             'afterwards': 1,
             'occurred': 1,
             'ought': 1,
             'havewondered': 1,
             'at': 9,
             'this': 8,
             'time': 8,
             'all': 9,
             'seemed': 2,
             'quite': 1,
             'natural': 1,
             'actually': 1,
             'TOOK': 1,
             'A': 1,
             'WATCH': 1,
             'OUT': 1,
             'OF': 1,
             'ITS': 1,
             'WAISTCOAT': 1,
             'POCKET': 1,
             'looked': 3,
             'then': 4,
             'hurried': 1,
             'on': 8,
             'started': 1,
             'toher': 1,
             'feet': 2,
             'flashed': 1,
             'across': 2,
             'neverbefore': 1,
             'seen': 2,
             'rabbit': 3,
             'either': 3,
             'waistcoat': 1,
             'pocket': 1,
             'watch': 1,
             'totake': 1,
             'burning': 1,
             'curiosity': 1,
             'thefield': 1,
             'after': 3,
             'fortunately': 1,
             'just': 3,
             'see': 7,
             'popdown': 1,
             'large': 3,
             'hole': 3,
             'under': 1,
             'hedge': 1,
             'In': 1,
             'another': 3,
             'moment': 2,
             'down': 16,
             'went': 5,
             'never': 1,
             'onceconsidering': 1,
             'how': 6,
             'world': 1,
             'again': 4,
             'The': 2,
             'straight': 1,
             'like': 5,
             'tunnel': 1,
             'some': 1,
             'dipped': 1,
             'not': 13,
             'amoment': 2,
             'think': 9,
             'about': 6,
             'stopping': 1,
             'herself': 3,
             'before': 4,
             'found': 3,
             'herselffalling': 1,
             'deep': 2,
             'Either': 1,
             'fell': 2,
             'slowly': 1,
             'shehad': 1,
             'plenty': 1,
             'look': 1,
             'towonder': 1,
             'going': 2,
             'happen': 1,
             'next': 1,
             'First': 1,
             'tried': 2,
             'lookdown': 1,
             'make': 1,
             'coming': 1,
             'too': 4,
             'dark': 3,
             'tosee': 1,
             'anything': 2,
             'sides': 1,
             'andnoticed': 1,
             'they': 6,
             'were': 6,
             'filled': 1,
             'cupboards': 2,
             'shelves': 2,
             'here': 4,
             'there': 4,
             'saw': 2,
             'maps': 1,
             'hung': 1,
             'upon': 4,
             'pegs': 1,
             'Shetook': 1,
             'jar': 2,
             'from': 3,
             'one': 6,
             'passed': 1,
             'waslabelled': 1,
             'ORANGE': 1,
             'MARMALADE': 1,
             'great': 2,
             'disappointment': 1,
             'itwas': 1,
             'empty': 1,
             'drop': 1,
             'fear': 1,
             'killingsomebody': 1,
             'managed': 1,
             'put': 2,
             'shefell': 1,
             'past': 1,
             'Well': 1,
             'such': 2,
             'fall': 4,
             'Ishall': 1,
             'tumbling': 1,
             'stairs': 1,
             'How': 3,
             'brave': 1,
             'llall': 1,
             'me': 6,
             'home': 1,
             'Why': 1,
             'wouldn': 1,
             't': 4,
             'even': 3,
             'if': 6,
             'off': 4,
             'top': 1,
             'house': 1,
             'Which': 1,
             'likelytrue': 1,
             'Down': 2,
             'Would': 1,
             'NEVER': 1,
             'come': 2,
             'an': 1,
             'end': 1,
             'Iwonder': 1,
             'many': 2,
             'miles': 2,
             've': 2,
             'fallen': 1,
             'said': 3,
             'aloud': 1,
             'must': 1,
             'somewhere': 2,
             'near': 1,
             'centre': 1,
             'earth': 2,
             'Letme': 1,
             'four': 1,
             'thousand': 1,
             'you': 16,
             'learnt': 1,
             'several': 2,
             'things': 1,
             'sort': 2,
             'herlessons': 1,
             'schoolroom': 1,
             'though': 2,
             'goodopportunity': 1,
             'showing': 1,
             'knowledge': 1,
             'no': 6,
             'tolisten': 1,
             'still': 2,
             'good': 1,
             'practice': 1,
             'yes': 1,
             's': 5,
             'right': 2,
             'distance': 1,
             'wonder': 3,
             'Latitudeor': 1,
             'Longitude': 2,
             'got': 2,
             'idea': 1,
             'Latitude': 1,
             'nice': 3,
             'grand': 1,
             'words': 2,
             'tosay': 1,
             'Presently': 1,
             'began': 2,
             'rightTHROUGH': 1,
             'funny': 1,
             'll': 5,
             'seem': 1,
             'among': 1,
             'thepeople': 1,
             'walk': 1,
             'their': 1,
             'heads': 1,
             'downward': 1,
             'Antipathies': 1,
             'Ithink': 1,
             'rather': 1,
             'glad': 1,
             'WAS': 1,
             'listening': 1,
             'thistime': 1,
             'didn': 2,
             'sound': 1,
             'word': 1,
             'shallhave': 1,
             'ask': 2,
             'them': 2,
             'name': 1,
             'country': 1,
             'know': 2,
             'Please': 1,
             'Ma': 1,
             'am': 1,
             'New': 1,
             'Zealand': 1,
             'Australia': 1,
             'triedto': 1,
             'curtsey': 1,
             'spoke': 1,
             'fancy': 1,
             'CURTSEYING': 1,
             're': 1,
             'fallingthrough': 1,
             'air': 2,
             'Do': 3,
             'manage': 1,
             'And': 2,
             'whatan': 1,
             'ignorant': 1,
             'little': 7,
             'girl': 1,
             'asking': 1,
             'No': 2,
             'llnever': 1,
             'perhaps': 1,
             'written': 1,
             'else': 1,
             'soonbegan': 1,
             'talking': 1,
             'Dinah': 5,
             'miss': 1,
             'night': 1,
             'Ishould': 1,
             'cat': 1,
             'hope': 1,
             'rememberher': 1,
             'saucer': 1,
             'milk': 1,
             'tea': 1,
             'my': 3,
             'wish': 1,
             'weredown': 1,
             'are': 1,
             'mice': 1,
             'm': 1,
             'afraid': 1,
             'butyou': 1,
             'might': 3,
             'catch': 1,
             'bat': 1,
             'mouse': 1,
             'But': 1,
             'cats': 4,
             'eat': 5,
             'bats': 3,
             'getrather': 1,
             'saying': 2,
             'dreamy': 1,
             'ofway': 1,
             'sometimes': 1,
             'Dobats': 1,
             'couldn': 1,
             'answer': 1,
             'eitherquestion': 1,
             'matter': 1,
             'which': 2,
             'She': 2,
             'feltthat': 1,
             'dozing': 1,
             'begun': 2,
             'dream': 1,
             'shewas': 1,
             'walking': 1,
             'hand': 2,
             'veryearnestly': 1,
             'Now': 1,
             'tell': 1,
             'truth': 1,
             'ever': 3,
             'abat': 1,
             'thump': 2,
             'came': 3,
             'heap': 1,
             'ofsticks': 1,
             'dry': 1,
             'leaves': 1,
             'bit': 1,
             'hurt': 1,
             'jumped': 1,
             'overhead': 1,
             'herwas': 1,
             'long': 3,
             'passage': 2,
             'White': 1,
             'insight': 1,
             'hurrying': 1,
             'lost': 1,
             'away': 1,
             'wind': 1,
             'itsay': 1,
             'turned': 2,
             'corner': 1,
             'ears': 1,
             'whiskers': 1,
             'lateit': 1,
             'behind': 2,
             'thecorner': 1,
             'longer': 1,
             'foundherself': 1,
             'low': 1,
             'hall': 4,
             'lit': 1,
             'row': 1,
             'lampshanging': 1,
             'roof': 1,
             'doors': 1,
             'round': 3,
             'locked': 1,
             'been': 1,
             'side': 1,
             'theother': 1,
             'trying': 1,
             'every': 1,
             'door': 3,
             'walked': 1,
             'sadly': 1,
             'middle': 1,
             'wondering': 1,
             'Suddenly': 1,
             'three': 1,
             'legged': 1,
             'table': 2,
             'ofsolid': 1,
             'glass': 1,
             'except': 1,
             'tiny': 1,
             'golden': 2,
             'key': 3,
             'first': 1,
             'belong': 1,
             'thedoors': 1,
             'alas': 1,
             'locks': 1,
             'orthe': 1,
             'small': 1,
             'any': 3,
             'rate': 2,
             'open': 1,
             'ofthem': 1,
             'However': 2,
             'second': 1,
             'lowcurtain': 1,
             'noticed': 1,
             'littledoor': 1,
             'fifteen': 1,
             'inches': 1,
             'high': 1,
             'keyin': 1,
             'lock': 1,
             'delight': 1,
             'fitted': 1,
             'opened': 1,
             'led': 1,
             'smallpassage': 1,
             'larger': 1,
             'than': 1,
             'rat': 1,
             'knelt': 1,
             'andlooked': 1,
             'along': 1,
             'loveliest': 1,
             'garden': 1,
             'longed': 1,
             'wander': 1,
             'aboutamong': 1,
             'those': 2,
             'beds': 1,
             'bright': 1,
             'flowers': 1,
             'cool': 1,
             'fountains': 1,
             'butshe': 1,
             'head': 2,
             'doorway': 1,
             'ifmy': 1,
             'go': 1,
             'through': 1,
             'poor': 1,
             'ofvery': 1,
             'shoulders': 1,
             'wishI': 1,
             'shut': 1,
             'telescope': 1,
             'onlyknow': 1,
             'begin': 1,
             'For': 1,
             'thingshad': 1,
             'happened': 1,
             'lately': 1,
             'fewthings': 1,
             'indeed': 1,
             'really': 1,
             'impossible': 1,
             'waiting': 1,
             'shewent': 1,
             'back': 1,
             'half': 1,
             'hoping': 1,
             'find': 1,
             'onit': 1,
             'rules': 1,
             'shutting': 1,
             'people': 1,
             'liketelescopes': 1,
             'bottle': 4,
             'whichcertainly': 1,
             'neckof': 1,
             'paper': 1,
             'label': 1,
             'DRINK': 1,
             'ME': 1,
             'beautifully': 1,
             'printed': 1,
             'letters': 1,
             'It': 1,
             'Drink': 1,
             'wise': 1,
             'littleAlice': 1,
             'THAT': 1,
             'hurry': 1,
             'lookfirst': 1,
             'whether': 1,
             'marked': 3,
             'poison': 3,
             'read': 1,
             'histories': 1,
             'children': 1,
             'whohad': 1,
             'burnt': 1,
             'eaten': 1,
             'wild': 1,
             'beasts': 1,
             'other': 1,
             'unpleasantthings': 1,
             'because': 1,
             'WOULD': 1,
             'remember': 1,
             'simple': 1,
             'rulestheir': 1,
             'friends': 1,
             'taught': 1,
             'red': 1,
             'pokerwill': 1,
             'burn': 1,
             'hold': 1,
             'cut': 1,
             'yourfinger': 1,
             'deeply': 1,
             'knife': 1,
             'usually': 1,
             'bleeds': 1,
             'hadnever': 1,
             'forgotten': 1,
             'drink': 1,
             'almost': 1,
             'certain': 1,
             'disagree': 1,
             'sooner': 1,
             'orlater': 1,
             'NOT': 1,
             'venturedto': 1,
             'taste': 1,
             'finding': 1,
             'fact': 1,
             'sortof': 1,
             'mixed': 1,
             'flavour': 1,
             'cherry': 1,
             'tart': 1,
             'custard': 1,
             'pine': 1,
             'apple': 1,
             'roastturkey': 1,
             'toffee': 1,
             'buttered': 1,
             'toast': 1,
             'soon': 1,
             'finishedit': 1,
             '': 1})
    In [41]:
    c3.most_common(10)
    
    Out[41]:
    [('the', 58),
     ('she', 45),
     ('it', 45),
     ('to', 44),
     ('and', 44),
     ('was', 38),
     ('a', 36),
     ('of', 25),
     ('I', 21),
     ('Alice', 19)]
     

    4.如何根据字典中值的大小, 对字典中的项排序

    In [42]:
    sorted([9,3,1,67,6])
    
    Out[42]:
    [1, 3, 6, 9, 67]
    In [43]:
    from random import randint
    
    In [44]:
    d = {x:randint(60,100) for x in 'xyzabc'}
    
    In [45]:
    d
    
    Out[45]:
    {'x': 96, 'y': 87, 'z': 86, 'a': 68, 'b': 61, 'c': 75}
    In [46]:
    d.keys()
    
    Out[46]:
    dict_keys(['x', 'y', 'z', 'a', 'b', 'c'])
    In [47]:
    d.values()
    
    Out[47]:
    dict_values([96, 87, 86, 68, 61, 75])
    In [48]:
    #方案一:利用zip将字典转换成元组进行排序
    sorted(zip(d.values(),d.keys()))
    
    Out[48]:
    [(61, 'b'), (68, 'a'), (75, 'c'), (86, 'z'), (87, 'y'), (96, 'x')]
    In [49]:
    d.items()
    
    Out[49]:
    dict_items([('x', 96), ('y', 87), ('z', 86), ('a', 68), ('b', 61), ('c', 75)])
    In [50]:
    #方案二:传递sorted函数的key参数
    sorted(d.items(),key=lambda x:x[1])
    
    Out[50]:
    [('b', 61), ('a', 68), ('c', 75), ('z', 86), ('y', 87), ('x', 96)]
     

    5.如何快速找到多个字典中的公共键(key)

    In [51]:
    from random import randint,sample
    
    In [52]:
    from random import randint,sample
    
    In [53]:
    # 取样
    sample('abcdef',3)
    
    Out[53]:
    ['e', 'd', 'a']
    In [54]:
    sample('abcdef',randint(3,6))
    
    Out[54]:
    ['a', 'd', 'e', 'c']
    In [55]:
    # 找出s1,s2,s3中都存在的key
    
    # 方案一:遍历
    s1 = {x:randint(1,4) for x in sample('abcdef',randint(3,6))}
    
    In [56]:
    s1
    
    Out[56]:
    {'c': 1, 'b': 2, 'e': 3, 'd': 3, 'f': 1, 'a': 2}
    In [57]:
    s2 = {x:randint(1,4) for x in sample('abcdef',randint(3,6))}
    
    In [58]:
    s3 = {x:randint(1,4) for x in sample('abcdef',randint(3,6))}
    
    In [59]:
    s2
    
    Out[59]:
    {'a': 3, 'f': 1, 'c': 1, 'b': 2, 'd': 4, 'e': 4}
    In [60]:
    s3
    
    Out[60]:
    {'a': 3, 'd': 1, 'e': 1}
    In [61]:
    res = []
    for k in s1:
        if k in s2 and k in s3:
            res.append(k)
    
    In [62]:
    res
    
    Out[62]:
    ['e', 'd', 'a']
    In [63]:
    # 方案二:使用集合
    s1
    
    Out[63]:
    {'c': 1, 'b': 2, 'e': 3, 'd': 3, 'f': 1, 'a': 2}
    In [64]:
    s1.keys()
    
    Out[64]:
    dict_keys(['c', 'b', 'e', 'd', 'f', 'a'])
    In [65]:
    s2.keys()
    
    Out[65]:
    dict_keys(['a', 'f', 'c', 'b', 'd', 'e'])
    In [66]:
    s1.keys() & s2.keys() & s3.keys()
    
    Out[66]:
    {'a', 'd', 'e'}
    In [67]:
    # 方案三:使用map和reduce
    
    # Python3里,map返回的结果是迭代器(iterator)
    list(map(dict.keys,[s1,s2,s3]))
    
    Out[67]:
    [dict_keys(['c', 'b', 'e', 'd', 'f', 'a']),
     dict_keys(['a', 'f', 'c', 'b', 'd', 'e']),
     dict_keys(['a', 'd', 'e'])]
    In [68]:
    from functools import reduce
    # reduce() 函数会对参数序列中元素进行累积。
    reduce(lambda a,b:a & b,map(dict.keys,[s1,s2,s3]))
    
    Out[68]:
    {'a', 'd', 'e'}
     

    6.如何让字典保持有序

    In [69]:
    d = {}
    d['Tom'] = (1,35)
    d['Bob'] = (2,37)
    d['Kate'] = (3,45)
    
    In [70]:
    d
    
    Out[70]:
    {'Tom': (1, 35), 'Bob': (2, 37), 'Kate': (3, 45)}
    In [71]:
    # python3.6之后字典有序,按照数据存入的顺序
    for k in d:
        print(k)
    
     
    Tom
    Bob
    Kate
    
    In [72]:
    # 有序字典OrderedDict
    from collections import OrderedDict
    d = OrderedDict()
    
    In [73]:
    d['Tom'] = (1,35)
    d['Bob'] = (2,37)
    d['Kate'] = (3,45)
    
    for k in d:
        print(k)
    
     
    Tom
    Bob
    Kate
    
    In [74]:
    from time import time
    from random import randint
    from collections import OrderedDict
    
    d = OrderedDict()
    players  =list('ABCDEFGH')
    start =  time()
    
    for i in range(8):
        '''模拟选手比赛消耗时间并存入字典中'''
        input()
        p = players.pop(randint(0,7-i))
        end = time()
        print(i + 1, p, end - start,sep=' ')
        d[p] = (i + 1, end - start)
    
    print('-' * 30)
    
    for k in d:
        print(k, d[k])
    
     
    1 B 3.176684856414795
    
    2 A 3.636547327041626
    
    3 G 3.978159189224243
    
    4 E 4.341858386993408
    
    5 D 4.702983379364014
    
    6 F 5.248721599578857
    
    7 C 5.690965414047241
    
    8 H 6.034142017364502
    ------------------------------
    B (1, 3.176684856414795)
    A (2, 3.636547327041626)
    G (3, 3.978159189224243)
    E (4, 4.341858386993408)
    D (5, 4.702983379364014)
    F (6, 5.248721599578857)
    C (7, 5.690965414047241)
    H (8, 6.034142017364502)
    
     

    7.如何实现用户的历史记录功能(最多n条)

    In [75]:
    from collections import deque
    # 创建双向队列
    q = deque([], 5)
    
    In [76]:
    q
    
    Out[76]:
    deque([])
    In [77]:
    q.append(1)
    q.append(2)
    q.append(3)
    q.append(4)
    q.append(5)
    
    q
    
    Out[77]:
    deque([1, 2, 3, 4, 5])
    In [78]:
    q.append(6)
    
    q
    
    Out[78]:
    deque([2, 3, 4, 5, 6])
    In [79]:
    from random import randint
    from collections import deque
    
    N = randint(0, 100)
    history = deque([], 5)
    
    def guess(k):
        if k == N:
            print('Right')
            return True
        if k < N:
            print('%s is less-than N' % k)
        else:
            print('%s is greater-than N' % k)
        return False
    
    while True:
        line = input('Please input a number:')
        if line.isdigit():
            k = int(line)
            history.append(k)
            if guess(k):
                break
        elif line == 'history' or line == 'h':
            print(list(history))
    
     
    Please input a number:50
    50 is less-than N
    Please input a number:80
    80 is less-than N
    Please input a number:90
    90 is less-than N
    Please input a number:91
    91 is less-than N
    Please input a number:92
    92 is less-than N
    Please input a number:93
    93 is less-than N
    Please input a number:h
    [80, 90, 91, 92, 93]
    Please input a number:95
    95 is greater-than N
    Please input a number:94
    Right
    
    In [80]:
    import pickle
    
    In [81]:
    q
    
    Out[81]:
    deque([2, 3, 4, 5, 6])
    In [82]:
    # 将数据存入文件
    pickle.dump(q,open('history','wb'))
    
    In [83]:
    # 读取文件
    q2 = pickle.load(open('history','rb'))
    
    In [84]:
    q2
    
    Out[84]:
    deque([2, 3, 4, 5, 6])

  • 相关阅读:
    系统综合实践第三次实践
    系统综合实践第二次实践作业
    第1次实践作业
    软工总结
    团队Beta演示
    团队Beta5
    软工实践个人总结
    第09组 Beta版本演示
    第09组 Beta冲刺(5/5)
    第09组 Beta冲刺(4/5)
  • 原文地址:https://www.cnblogs.com/prince5460/p/10094871.html
Copyright © 2011-2022 走看看