簡體   English   中英

串聯列表中的兩個字符串

[英]Concatenating two strings in a list of lists

標題有點誤導,因為我不夠聰明,無法拿出適當的標頭來准確描述我要完成的工作,因此我對此表示歉意。 希望我可以用下面的描述彌補這一點。

我正在做一本書的練習,需要進行一些清理才能執行任何其他操作。 我有一個列表列表,其中某些列表中的元素(不是全部)中的元素需要通過級聯進行更新(或者,如果有人建議,則可能是其他更有效的方式)。 為了更好地說明,這是該列表的一部分:

[['e726fb69de83a3ec', 'General_Mobile', 'Android', 'unknown', '0'], 
['1b8978f618d59eef', 'General_Mobile', 'iOS', 'unknown', '0'], 
['8ee82ed6c2c5af59', 'General_Desktop', 'Windows', 'XP', 'male', '29'], 
['d0fff09ca1829e65', 'General_Mobile', 'Android', 'female', '48'], 
['3126deccaae39ea1', 'General_Desktop', 'Windows', 'XP', 'male', '24'], 
['6778d882a1f59b5b', 'General_Mobile', 'iOS', 'female', '25']]

每個列表中的元素分別對應於用戶ID,設備,操作系統,性別和省份ID。 如果您看一下第三和第五個列表,這就是我的兩難境地-您會注意到“ Windows”和“ XP”是單獨的字符串,而它們應該是單個字符串,即只是“ Windows XP” ”,這樣這兩個字符串就會在它們各自的列表中顯示為:

['8ee82ed6c2c5af59', 'General_Desktop', 'Windows XP', 'male', '29']
['3126deccaae39ea1', 'General_Desktop', 'Windows XP', 'male', '24']

上面的其余列表都可以解決此問題,因此無需修改它們。

因此,我嘗試開發一些合理的方法,使我可以將兩個字符串連接到具有這種分隔的列表中(我在上面的示例中未顯示其他列表,它們以類似的方式顯示,例如,“ Windows”“ 7”而不是“ Windows 7”),但我尚未這樣做。 有沒有一種“干凈”的方法可以這樣做,還是我不得不創建一個循環來刪除這些字符串,然后插入兩者的串聯?

您可以使用簡單的列表理解:

>>> data = [['e726fb69de83a3ec', 'General_Mobile', 'Android', 'unknown', '0'],
['1b8978f618d59eef', 'General_Mobile', 'iOS', 'unknown', '0'],
['8ee82ed6c2c5af59', 'General_Desktop', 'Windows', 'XP', 'male', '29'],
['d0fff09ca1829e65', 'General_Mobile', 'Android', 'female', '48'],
['3126deccaae39ea1', 'General_Desktop', 'Windows', 'XP', 'male', '24'],
['6778d882a1f59b5b', 'General_Mobile', 'iOS', 'female', '25']]

接着:

>>> [item if len(item) == 5 else item[:2] + [' '.join(item[2:4])] + item[4:] for item in data]
[['e726fb69de83a3ec', 'General_Mobile', 'Android', 'unknown', '0'], ['1b8978f618d59eef', 'General_Mobile', 'iOS', 'unknown', '0'], ['8ee82ed6c2c5af59', 'General_Desktop', 'Windows XP', 'male', '29'], ['d0fff09ca1829e65', 'General_Mobile', 'Android', 'female', '48'], ['3126deccaae39ea1', 'General_Desktop', 'Windows XP', 'male', '24'], ['6778d882a1f59b5b', 'General_Mobile', 'iOS', 'female', '25']]

對於您的特定情況,如果始終是問題所在的平台,則可以檢查列表中是否有太多項目,如果有,則在第二和第三索引上合並這些項目。 但是,如果您需要更廣泛的解決方案,請澄清您的問題。

NUM_ITEMS_PER_LIST = 5
lists = [
    ['e726fb69de83a3ec', 'General_Mobile', 'Android', 'unknown', '0'],
    ['1b8978f618d59eef', 'General_Mobile', 'iOS', 'unknown', '0'],
    ['8ee82ed6c2c5af59', 'General_Desktop', 'Windows', 'XP', 'male', '29'],
    ['d0fff09ca1829e65', 'General_Mobile', 'Android', 'female', '48'],
    ['3126deccaae39ea1', 'General_Desktop', 'Windows', 'XP', 'male', '24'],
    ['6778d882a1f59b5b', 'General_Mobile', 'iOS', 'female', '25']
]

for l in lists:
    if len(l) > NUM_ITEMS_PER_LIST:
        l[2] = '{} {}'.format(l[2], l[3])
        del l[3]

print(lists)

輸出

[
    ['e726fb69de83a3ec', 'General_Mobile', 'Android', 'unknown', '0'],
    ['1b8978f618d59eef', 'General_Mobile', 'iOS', 'unknown', '0'],
    ['8ee82ed6c2c5af59', 'General_Desktop', 'Windows XP', 'male', '29'],
    ['d0fff09ca1829e65', 'General_Mobile', 'Android', 'female', '48'],
    ['3126deccaae39ea1', 'General_Desktop', 'Windows XP', 'male', '24'],
    ['6778d882a1f59b5b', 'General_Mobile', 'iOS', 'female', '25']
]

使用map

mylist = [['e726fb69de83a3ec', 'General_Mobile', 'Android', 'unknown', '0'], ['1b8978f618d59eef', 'General_Mobile', 'iOS', 'unknown', '0'], ['8ee82ed6c2c5af59', 'General_Desktop', 'Windows', 'XP', 'male', '29'], ['d0fff09ca1829e65', 'General_Mobile', 'Android', 'female', '48'], ['3126deccaae39ea1', 'General_Desktop', 'Windows', 'XP', 'male', '24'], ['6778d882a1f59b5b', 'General_Mobile', 'iOS', 'female', '25']]

map(lambda x: x[:2]+[" ".join(x[2:4])]+x[4:] if len(x) == 6 else x, mylist)

輸出:

[['e726fb69de83a3ec', 'General_Mobile', 'Android', 'unknown', '0'],
 ['1b8978f618d59eef', 'General_Mobile', 'iOS', 'unknown', '0'],
 ['8ee82ed6c2c5af59', 'General_Desktop', 'Windows XP', 'male', '29'],
 ['d0fff09ca1829e65', 'General_Mobile', 'Android', 'female', '48'],
 ['3126deccaae39ea1', 'General_Desktop', 'Windows XP', 'male', '24'],
 ['6778d882a1f59b5b', 'General_Mobile', 'iOS', 'female', '25']]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM