2017-03-03 137 views
0

驗證碼:怎樣才能讓這些代碼3個系更加乾燥

if len(group['elements']) > 0: 
    groups.append(group) 
    group = {'bla': '', 'elements': []} 

在下面的例子中重複3次。我想把它放在1行(至少使它減少)。有可能嗎?那我該怎麼做?

collection_of_items = [ 
    ['strong', 'a', ['a'], '', 'strong', ['a'], ['a'], 'a', 'a', [], ''], 
    ['strong', 'a', ['a'], '', 'strong', 'a'] 
] 

groups = [] 

for items in collection_of_items: 
    group = {'bla': '', 'elements': []} 
    for item in items: 
     if hasattr(item, 'lower'): 
      if item == 'strong': 
       group['bla'] = item 
      elif item =='a': 
       group['elements'].append(item) 
      elif item == '': 
       # Make it DRY <--------------------------------------- 
       if len(group['elements']) > 0: 
        groups.append(group) 
        group = {'bla': '', 'elements': []} 
     else: 
      if 'a' in item: 
       group['elements'].append(item[0]) 
      else: 
       # Make it DRY <--------------------------------------- 
       if len(group['elements']) > 0: 
        groups.append(group) 
        group = {'bla': '', 'elements': []} 

    # Make it DRY <---------------------------------------  
    if len(group['elements']) > 0: 
       groups.append(group) 
       group = {'bla': '', 'elements': []} 

print(groups) 

修改這些三線,

注意:做任何事情,但示例代碼結構不能改變

對不起,我的錯誤。

+1

第一事物優先:*使用四個空格進行縮進*。但是,你不能把它包裝在一個函數中嗎? –

+0

對不起。實際上我使用在線ide。這就是爲什麼2個空格。現在更新 –

回答

1

將該代碼放入函數中,並隨時調用它。但嚴重的是,4空格縮進。

collection_of_items = [ 
    ['strong', 'a', ['a'], '', 'strong', ['a'], ['a'], 'a', 'a', [], ''], 
    ['strong', 'a', ['a'], '', 'strong', 'a'] 
] 

groups = [] 

def my_func(g): 
    if len(g['elements']) > 0: 
    groups.append(g) 
    g = {'bla': '', 'elements': []} 
    return g 

for items in collection_of_items: 
    group = {'bla': '', 'elements': []} 
    for item in items: 
    if hasattr(item, 'lower'): 
     if item == 'strong': 
     group['bla'] = item 
     elif item =='a': 
     group['elements'].append(item) 
     elif item == '': 
     group = my_func(group) 
    else: 
     if 'a' in item: 
     group['elements'].append(item[0]) 
     else: 
     group = my_func(group) 

    group = my_func(group) 

print(groups) 
+0

可以將這整個代碼包含在另一個函數內 –

+0

您的意思是,所有的代碼在'cllection_of_items:'循環中的項目? – ODiogoSilva

+0

我的意思是整個代碼將在另一個函數中。像 'def你好: //代碼去這裏' –