标题有点误导,因为我不够聪明,不能提出一个合适的标题来描述我正在努力完成的事情,所以我为此道歉。希望我可以通过下面的描述来弥补这一点。
我正在从一本需要进行清理的书中进行练习才能执行任何其他操作。我有一个列表列表,其中某些中的元素,而不是所有这些列表中的元素都需要通过连接进行更新(或者其他更有效的方法,如果人们建议它们)。为了更好地解释,这里是列表清单的一部分:
[['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']]
每个列表中的元素分别对应于userID,device,OS,sex和provinceID。如果你看看第三和第五个列表,这就是我的困境出现的地方 - 你会注意到'Windows'和'XP'是单独的字符串,它们应该是一个字符串,即只是'Windows XP ',以便这两个字符串在其他列表中出现在其他列表中:
['8ee82ed6c2c5af59', 'General_Desktop', 'Windows XP', 'male', '29']
['3126deccaae39ea1', 'General_Desktop', 'Windows XP', 'male', '24']
上述其余列表已从此问题中解除,因此无需修改它们。
所以,我已经尝试开发一些合理的方法,通过这种方法我可以将这两个字符串连接到具有这种分离的列表中(我在上面的示例中没有显示其他类似的显示,例如,'Windows' '7'而不是'Windows 7'),但我还没有这样做。有没有“干净”的方法这样做,还是我不得不求助于创建一个删除这些字符串的循环,然后插入两者的串联?
答案 0 :(得分:2)
您可以使用简单的列表理解:
>>> 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']]
答案 1 :(得分:0)
对于您的具体情况,如果它始终是可能存在问题的平台,您可以检查列表是否包含太多项目,如果是,则组合第2和第3个索引上的项目。如果您需要更广泛的解决方案,请在您的问题中澄清。
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']
]
答案 2 :(得分:0)
使用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']]