从列表列表中删除特定短语

时间:2014-07-16 15:51:38

标签: python

我已将数据存储在列表列表中(我无法使用dict,因为我需要重复键)。该列表如下:

data = [[1, "name email@email.com address"], [2, "name2 email@@email2.com address"], ...]

我的目标是从数据列表中删除电子邮件地址(即列表列表)。不幸的是,电子邮件地址都不同。它们只共享一个共同特征:它们都包含符号“@”。

我尝试使用列表推导。但是,我只能删除整个元素,即“名称email@email.com地址”被完全删除:

newlist = [element for element in data.split() if "@" not in elment]

我想过将“name email@email.com地址”拆分为子列表,使用“”作为分隔符。然而,这也是一个问题:它破坏了格式。我很难将列表组合成初始格式,因为有时“name email@email.com address”包含三个以上的单词。例如,它可能是“”name1 name2 name3 email@email.com email2 email3 address1 address2 address3“。

这样做的最佳方式是什么?

编辑:

要回答亚当·斯密的问题,我正在寻找

data = [[1, "name address"], [2, "name2 address"], ...]

作为我的输出。换句话说,原始格式(列表列表,其中子列表包含两个元素,一个是数字,另一个是“名称,地址,地址1等”)保留,没有电子邮件地址。

2 个答案:

答案 0 :(得分:2)

data = [[1, "name email@email.com address"], [2, "name2 email@@email2.com address"],[3, "name1 name2 name3 email@email.com email2 email3 address1 address2 address3"]]

for ind,d in enumerate(data):
         data[ind]=[d[0]," ".join([x for x in d[1].split() if "@" not in x])] # add the int first then change elements from  index 1. 
print data

[[1, 'name address'], [2, 'name2 address'], [3, 'name1 name2 name3 email2 email3 address1 address2 address3']]

答案 1 :(得分:0)

我认为你应该拆分'@'字符,然后遍历拆分生成的字符串列表,使用rfind将第一个元素与其结尾配对,以查找空格字符和从启动开始的第二个元素,直到第一空间。然后,删除那些子串。如果是可能存在多个电子邮件地址的情况,则需要对所有剩余元素执行相同操作(将第二个和第三个元素配对,将第三个和第四个元素配对等)以查看是否存在要删除的其他子串。