2013-06-24 58 views
1

我有一個這樣的名單:如何將這個列表轉換成給定的格式?

hello = [[<User: mr--adhikari>], [<User: mr--adhikari>], [<User: mr--adhikari>, <User: awesome>]] 

我要轉換的列表看起來像這樣:

[['mr--adhikari'], ['mr--adhikari'], ['mr--adhikari', 'awesome']] 

試圖用:

re = [i.split(':')[1] for i in hello] 
ref = [i.split('>')[0] for i in ref] 

這工作,如果我有隻在同一個列表中沒有兩個元素。我可能有或沒有兩個元素在同一個列表中。

編輯: 我的動態列表:

shared_username = ['[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>, <User: awesome>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]'] 

shared_username = [[y.lstrip('<User: ').rstrip('>') for y in x] for x in shared_username] 

結果:

[['[', '', '', '', '', '', '', '', 'm', '', '-', '..so on 

回答

1

使用的sts.lstripstr.rstrip組合:

演示:

>>> strs = '[<User: mr--adhikari>]' 
>>> strs = strs.lstrip('[<User: ') 
>>> strs 
'mr--adhikari>]' 
>>> strs = strs.rstrip('>]') 
>>> strs 
'mr--adhikari' 

代碼:

>>> hello = [['<User: mr--adhikari>'], ['<User: mr--adhikari>'], ['<User: mr--adhikari>', '<User: awesome>']] 
>>> [ [y.lstrip('<User: ').rstrip('>') for y in x] for x in hello ] 
[['mr--adhikari'], ['mr--adhikari'], ['mr--adhikari', 'awesome']] 

更新:

>>> shared_username = ['[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>, <User: awesome>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]'] 

>>> [[y.lstrip('[<User: ').rstrip('>]') for y in x.split(', ')] for x in shared_username] 
[['mr--adhikari'], ['mr--adhikari'], ['mr--adhikari'], ['mr--adhikari'], ['mr--adhikari', 'awesome'], ['mr--adhikari'], ['mr--adhikari'], ['mr--adhikari'], ['mr--adhikari']] 

演示:

strs = '[<User: mr--adhikari>, <User: awesome>]' 

分割字符串在', '率先拿到串的名單,現在在這個循環列表並應用str.lstrip,如上所述的。

>>> strs.split(', ') 
['[<User: mr--adhikari>', '<User: awesome>]'] 

更新:

使用regex

演示:

>>> import re 
>>> r = re.compile(r'User:\s([A-Za-z\-._/@]+)') 
>>> strs = '[<User: sachitad>, <User: awesome>]' 
>>> r.findall(strs) 
['sachitad', 'awesome'] 
>>> strs1 = '[<User: mr--adhikari>, <User: awesome>]' 
>>> r.findall(strs1) 
['mr--adhikari', 'awesome'] 
>>> strs2 = '[<User: respect>]' 
>>> r.findall(strs2) 
['respect'] 
>>> strs = '[<User: [email protected]>, <User: awe_so/me>]' 
>>> r.findall(strs) 
['[email protected]', 'awe_so/me'] 

代碼:

>>> shared_username = ['[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>, <User: awesome>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]'] 
>>> [r.findall(item) for item in shared_username] 
[['mr--adhikari'], ['mr--adhikari'], ['mr--adhikari'], ['mr--adhikari'], ['mr--adhikari', 'awesome'], ['mr--adhikari'], ['mr--adhikari'], ['mr--adhikari'], ['mr--adhikari']] 
+0

請參閱我更新的問題。 – pynovice

+0

@ user2032220我已經更新了我的答案。 –

+0

'lstrip'是個不錯的主意。引用文檔:「字符參數不是一個前綴;相反,它的值的所有組合都被剝離」。它適用於這組值,但是如果其中一個值是'[<用戶:尊重>]',它會給你'pect>]'。 – Matthias

0

只需確認,嵌套列表字符串或字典內的元素是?如果你不知道運行以下命令,檢查第一:打印類型(你好[0] [0])

UPDATE:

這裏是一個另類,是格式化的,你最初請求的輸出方式(沒有'用戶:')。這不是最簡潔的語法,但它似乎工作:

def get_user_data(lst, strip_str): 
    new_list = [] 
    for i in range(len(lst)): 
     tmp = lst[i] 
     for j in strip_str: 
      if j in tmp: 
       tmp = tmp.replace(j,'') 
     tmp = tmp.split(',') 
     new_list.append(tmp) 
    return new_list 

shared_username = ['[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>, <User: awesome>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]', '[<User: mr--adhikari>]'] 
new_list = get_user_data(shared_username,['<','>',' ','[',']','User:']) 
print new_list 

輸出:[ '先生 - 阿迪卡里'],[ '先生 - 阿迪卡里'],[ '先生 - 阿迪卡里'],[ 'mr - adhikari'],['mr - adhikari','awesome'],['mr - adhikari'],['mr - adhikari'],['mr - adhikari'],[' mr - adhikari']]

+0

他們是字符串。 – pynovice

+0

謝謝。我無法想象在一行或兩行中使用pythonic方法,但編寫一個函數來處理它應該很容易。用戶名可能包含任何空格,或者它們始終是沒有類似上述空格的字符串? – ChrisProsser

+0

@Ashwini Chaudhary給出的答案已經奏效。謝謝 – pynovice

相關問題