使用基本的vs列表理解附加到列表

时间:2015-08-21 11:55:33

标签: python-2.7

我试图掌握列表理解的使用,所以我在下面写了一些代码,我不明白使用理解附加到附加方法的标准之间的确切区别。

from __future__ import print_function

agenda = {'Banana' : 1, 'Apple' : 2, 'Mango' : 3, 'Orange' : 4}

#first case
comprehension = [(key, agenda[key]) for key in agenda if key == 'Orange']
print(comprehension)
print(type(comprehension))

#second case
list_ = []
for key in agenda:
    if key == 'Orange':
        list_.append(key)
        list_.append(agenda[key])
print(list_)
print(type(list_))

更令我印象深刻的是输出:

[('Orange', 4)]
<type 'list'>
['Orange', 4]
<type 'list'>

第一行似乎是一个元组,虽然类型是列表

我之所以创建上述代码的原因是为了理解为什么如果我使用更明确的&#39;更改下面的功能,那么某些词典的排序不能正常工作。环

来自编程历史学家教程的原始代码&#39;有效:

def sortFreqDict(freqdict):
    aux = [(freqdict[key], key) for key in freqdict]
    aux.sort()
    aux.reverse()
    return aux

我自己修改过的版本没有工作,看看我是否可以替代:

def sortFreqDict(freqdict):
    aux1 = []
    aux2 = []
    for key in freqdict:
        aux1.append(freqdict[key])
        aux2.append(key)
    aux1.sort()
    aux1.reverse()
    aux2.sort()
    aux2.reverse()
    return zip(aux1, aux2)

该功能的输入是:

{'': 2, 'all': 3, 'gt': 1, 'genteeler': 1, 'excellent': 1, 'four': 1, 'coach': 1, 'sleep': 2, 'seemed': 6, 'whose': 1, 'remarkable': 3, 'berner': 1, 'thursday': 1, 'to': 74, 'marks': 1, 'lord': 1, 'town': 2, 'belonging': 1, 'woman': 1, 'very': 1, 'debtor': 1, 'every': 2, 'bringing': 1, 'kindled': 1, 'and': 52, 'hour': 3, 'immediately': 3, 'did': 34, 'brother': 1, 'leave': 1, 'married': 1, 'brownish': 1, 'round': 2, 'prevent': 1, 'force': 1, 'second': 5, 'street': 2, '7th': 2, 'situated': 2, 'blue': 1, 'what': 15, 'defence': 1, 'stood': 1, 'richard': 2, 'clock': 5, 'witnesses': 1, 'version': 1, 'conduct': 1, 'ground': 1, 'public': 1, 'told': 1, 'body': 1, 'jury': 3, 'degree': 1, 'never': 5, 'chissels': 1, 'let': 1, 'others': 4, 'active': 2, 'quite': 1, 'extreme': 1, 'box': 1, 'remark': 4, 'thirty': 2, 'difficulty': 2, '33': 1, 'my': 22, 'guilty': 1, 'trial': 1, 'makes': 1, 'maker': 1, 'initials': 3, 'golden': 1, 'retired': 1, 'family': 1, 'danger': 1, 'marked': 1, 'ask': 1, 'lodging': 7, 'tuesday': 2, 'standing': 2, 'use': 1, 'from': 6, 'spoke': 1, 'positive': 5, 'two': 6, 'throw': 2, 'eleven': 1, 'live': 3, 'doubt': 2, 'examination': 3, 'taken': 2, 'tell': 1, 'more': 4, 'possession': 1, 'door': 7, 'riot': 1, 'company': 1, 'sister': 1, 'broke': 1, 'particular': 5, 'known': 1, 'producing': 2, 'me': 9, 'demolish': 1, 'none': 1, 'locked': 1, 'room': 9, 'err': 1, 'drawer': 1, 'this': 12, 'work': 1, 'roof': 1, 'nine': 4, 'servants': 3, 'mr': 19, 'following': 1, 'making': 1, 'akerman': 15, 'brown': 1, 'heard': 2, 'pulling': 1, 'something': 3, 'dress': 2, 'court': 1, 'destroying': 1, 'divided': 2, 'breaking': 1, 'parlour': 3, 'innumerable': 1, 'till': 3, 'swear': 7, 'footman': 1, 'sworn': 9, 'description': 1, 'after': 7, 'tied': 1, 'holbourn': 2, 'lay': 6, 'men': 3, 'coming': 2, 'such': 3, 'man': 17, 'a': 53, 'neck': 1, 'endeavoured': 1, 'or': 4, 'unlawfully': 1, 'so': 6, 'pulled': 1, 'order': 1, 'talk': 1, 'burnt': 4, 'six': 2, 'september': 1, 'john': 1, 'pointed': 1, 'years': 3, 'course': 2, 'genteel': 3, 'london': 1, 'mentioned': 1, 'dwelling': 1, 'still': 2, 'its': 1, 'before': 4, 'obeisance': 1, 'how': 2, 'continued': 1, 'curls': 1, 'crew': 1, 'better': 4, 'window': 7, '2015': 1, 'might': 1, 'happened': 1, 'then': 9, 'them': 12, 'evening': 4, '3': 1, 'motley': 1, 'encouraging': 1, 'they': 11, 'hands': 4, 'not': 19, 'day': 4, 'nor': 1, 'name': 7, 'servant': 7, 'always': 1, 'good': 2, 'truth': 1, 'found': 4, 'went': 9, 'quarter': 1, 'lie': 7, 'preceded': 1, 'square': 1, 'england': 1, 'weight': 1, 'doing': 3, 'house': 25, 'wednesday': 1, 'catching': 1, 'our': 3, 'mattocks': 2, 'out': 9, 'opened': 1, 'blacks': 1, 'confess': 1, 'since': 2, 'washed': 2, 'looking': 3, '7': 1, 'brewers': 1, 'got': 2, 'smithfield': 1, 'red': 1, 'she': 1, 'benjamin': 3, 'approached': 1, 'oldbaileyonline': 1, 'houses': 1, 'put': 3, 'org': 1, 'goodhousen': 1, 'thrown': 1, 'backwards': 1, 'could': 7, 'times': 4, 'thing': 8, 'length': 1, 'place': 4, 'w': 1, 'fallen': 1, 'think': 2, 'first': 5, 'notwith': 1, 'saving': 1, 'forwards': 1, 'number': 1, 'one': 8, 'wash': 1, 'sailor': 1, 'spokes': 1, 'another': 1, 'carry': 1, 'precisely': 1, 'open': 5, 'little': 3, 'their': 2, 'station': 1, 'master': 3, 'too': 1, 'white': 2, 'hundred': 1, 'that': 40, 'shelf': 2, 'nobody': 1, 'park': 1, 'took': 7, 'part': 1, 'believe': 8, 'stairs': 7, 'than': 7, 'remember': 3, 'kind': 1, 'perfectly': 2, '17': 1, 'bed': 2, 'roberts': 2, 'iron': 1, 'were': 18, 'exhibit': 1, 'riotously': 1, 'handkerchief': 3, 'ann': 3, 'turned': 1, 'mine': 3, 'northington': 1, 'say': 5, 'manner': 1, 'showers': 1, 'seen': 1, 'saw': 11, 'any': 20, 'forced': 2, 'self': 1, 'able': 1, 'dining': 1, 'demolished': 1, 'take': 3, 'which': 10, 'online': 1, 'bailey': 1, 'destroy': 1, 'begin': 1, 'towards': 1, 'death': 1, 'opposite': 3, 'who': 8, 'amongst': 4, 'prisoner': 20, 'america': 1, 'statute': 1, 'observation': 1, 'windows': 1, 'constable': 2, 'face': 9, 'looked': 3, 'proceedings': 1, 'stockings': 5, 'occasion': 1, 'left': 2, 'came': 6, 'landlady': 1, 'impression': 2, 'particularly': 1, 'blackmoor': 1, 'bring': 1, 'relation': 1, 'find': 2, 'make': 2, 'recollect': 1, 'knowledge': 2, 'justice': 1, 'nodded': 1, 'character': 3, 'grace': 1, 'being': 2, 'only': 2, 'wood': 3, 'black': 13, 'lodge': 1, 'circle': 2, 'b': 2, 'over': 2, 'do': 11, 'nares': 1, 'his': 39, 'get': 2, 'pocket': 2, 'cannot': 7, 'breast': 1, '2': 1, 'silk': 1, 'dr': 1, 'him': 27, 'bar': 2, 'held': 2, 'cry': 1, 'morning': 1, 'twice': 1, 'inactive': 2, 'catched': 1, 'activity': 1, 'rapped': 1, 'where': 5, 'view': 1, 'set': 2, 'throwing': 1, 'observed': 3, 'see': 7, 'are': 12, 'indicted': 1, 'said': 2, 'please': 1, 'mud': 1, 'outside': 1, 'between': 1, 'tried': 1, 'notice': 4, 'felons': 1, 'cut': 2, 'here': 3, 'conflagration': 1, 'distinguish': 2, 'come': 2, 'c': 1, 'last': 3, 'many': 1, 'equal': 1, 'against': 2, 's': 20, 'distinction': 1, 'wheels': 1, 'among': 1, 'tough': 1, 'afterwards': 3, 'bell': 1, 'legs': 2, 'tumultuously': 1, 'trunk': 4, 'key': 7, 'sticks': 2, 'destroyed': 1, 'light': 2, 'proceeded': 2, 'three': 6, 'been': 2, 'mark': 3, 'langdale': 1, 'threw': 1, 'shoulders': 1, 'lived': 2, 'partly': 1, 'attacked': 3, 'fire': 9, 'mind': 2, 'exposed': 1, 'else': 2, 'lives': 2, 'fellow': 1, 'those': 3, 'applied': 1, 'myself': 1, 'look': 1, 'these': 2, 'sandiman': 1, 'appearance': 2, 'excited': 1, 'gingling': 1, 'near': 1, 'suppose': 1, 't17800628': 1, 'voice': 2, 'seven': 3, 'have': 6, 'robert': 1, 'bludgeons': 1, 'is': 12, 'it': 36, 'helped': 1, 'middle': 1, 'itself': 1, 'lodged': 1, 'in': 62, 'heels': 1, 'if': 3, 'drawers': 2, 'things': 1, 'granted': 2, 'cross': 3, 'same': 3, 'party': 1, 'several': 3, 'difficult': 1, 'week': 4, 'used': 1, 'cheques': 1, 'keys': 2, 'upon': 6, 'hand': 3, 'persons': 4, 'running': 1, 'paving': 1, 'opportunity': 1, 'off': 5, 'i': 105, 'colour': 2, 'floor': 1, 'well': 1, 'thought': 2, 'person': 5, 'exceedingly': 1, 'without': 3, 'the': 192, 'bowsey': 3, 'gates': 1, '1780': 2, 'newgate': 1, 'rest': 3, 'judiciously': 1, 'recollection': 1, 'amp': 1, 'followed': 1, 'yes': 20, 'yet': 1, 'disturbance': 1, 'phillips': 2, 'rose': 1, 'had': 23, 'hall': 1, 'book': 2, 'innocent': 1, 'prison': 5, 'struck': 1, 'has': 6, 'hat': 6, 'indignation': 1, 'gave': 4, '324': 1, 'bid': 2, 'dark': 2, 'handkerchiefs': 1, 'five': 2, 'know': 9, 'mob': 14, 'lady': 1, 'furniture': 1, 'desire': 1, 'lessar': 2, 'steps': 1, 'night': 12, 'www': 1, 'old': 2, 'often': 1, 'people': 5, 'some': 11, 'hair': 5, 'crows': 1, 'sure': 2, 'sight': 1, 'home': 3, 'bore': 1, 'acquaintance': 1, 'esq': 1, 'exceeding': 1, 'be': 9, 'knew': 5, 'bb': 1, 'burn': 1, 'jennings': 2, 'assemble': 1, 'exciting': 1, 'by': 9, 'on': 26, 'about': 5, 'goods': 5, 'of': 68, 'am': 9, 'o': 5, 'dined': 1, 'nothing': 1, 'banker': 1, 'meddle': 1, 'seeing': 1, 'burning': 1, 'into': 4, 'within': 2, 'down': 12, 'pair': 9, 'formidable': 2, 'your': 3, 'barrocadoed': 1, 'there': 21, 'long': 1, 'way': 1, 'was': 71, 'head': 3, 'himself': 2, 'waistcoat': 1, 'form': 3, 'crown': 3, 'but': 11, 'washerwoman': 1, 'ha': 1, 'with': 14, 'shutters': 1, 'he': 50, 'pull': 1, 'counsel': 3, 'made': 7, 'smooth': 1, 'up': 11, 'percival': 1, '28th': 1, 'certain': 4, 'moved': 1, 'an': 8, 'as': 8, 'at': 26, 'candle': 1, 'wove': 2, 'again': 4, '6th': 6, 'no': 15, 'dressed': 3, 'peace': 2, 'when': 17, 'other': 11, 'remarks': 1, 'you': 50, 'borne': 1, 'searched': 1, 'june': 9, 'bundle': 1, 'meaning': 1, 'ago': 2, 'coat': 2, 'for': 8, 'wife': 1, 'together': 1, 'jacket': 1, 'time': 8, '8th': 1, 'having': 2, 'once': 1}

3 个答案:

答案 0 :(得分:2)

您可以使用isalnum()执行此操作,

>>> s ="snucd546789$%^&*jhvfj;';';,"
>>> ''.join(e for e in s if e.isalnum())
'snucd546789jhvfj'
>>> 
如果字符串中的所有字符都是字母数字且至少有一个字符,则

isalnum()返回true,否则返回false。

答案 1 :(得分:1)

编写代码的更好方法(保留用于列出所有禁用字符的元组)是

from __future__ import print_function


def forbidden(sentence):
    punctuations = ('!', '?', ' ', '.', ',', '+', 
                    ':', ';', '$', '(', ')', '\\', 
                    '[', ']', '{', '}', '#', '*',
                    '%', '@', '-', '=', '\'', '"')
    for char in sentence:
        if char in punctuations:
            sentence = sentence.replace(char, '')
    return sentence

print (forbidden("""Rise ,= + ;''"  @-=to,[]\\\\\{***{}}[] vo#t\\\e, sir:;???@%%%%!!please ":L"""))

答案 2 :(得分:0)

这可能会让您入门 - 使用re模块:

import re

strg = re.sub('[#!\?]', '', '#hello? world!')

print(strg)

输出:

'hello world'