从列表列表中删除元素

时间:2013-11-13 02:56:41

标签: python list for-loop

我有下面的数据,这是一个列表列表。我想从每个列表中删除最后两个元素,只留下前三个元素。我尝试了list.append()list.pop()但似乎无法让它们发挥作用。我想不可能从for循环中的列表中删除元素,这是我之前尝试过的。最好的方法是什么?

data = [(datetime.datetime(2013, 11, 12, 19, 24, 50), u'78:E4:00:0C:50:DF', u' 8', u'Hon Hai Precision In', u''), (datetime.datetime(2013, 11, 12, 19, 24, 50), u'78:E4:00:0C:50:DF', u' 8', u'Hon Hai Precision In', u''), (datetime.datetime(2013, 11, 12, 19, 24, 48), u'9C:2A:70:69:81:42', u' 5', u'Hon Hai Precision In 12:', u''), (datetime.datetime(2013, 11, 12, 19, 24, 47), u'00:1E:4C:03:C0:66', u' 9', u'Hon Hai Precision In', u''), (datetime.datetime(2013, 11, 12, 19, 24, 47), u'20:C9:D0:C6:8F:15', u' 8', u'Apple', u''), (datetime.datetime(2013, 11, 12, 19, 24, 47), u'68:5D:43:90:C8:0B', u' 11', u'Intel Orate', u' MADEGOODS'), (datetime.datetime(2013, 11, 12, 19, 24, 47), u'68:96:7B:C1:76:90', u' 15', u'Apple', u''), (datetime.datetime(2013, 11, 12, 19, 24, 47), u'68:96:7B:C1:76:90', u' 15', u'Apple', u''), (datetime.datetime(2013, 11, 12, 19, 24, 47), u'04:F7:E4:A0:E1:F8', u' 32', u'Apple', u''), (datetime.datetime(2013, 11, 12, 19, 24, 47), u'04:F7:E4:A0:E1:F8', u' 32', u'Apple', u'')]

2 个答案:

答案 0 :(得分:4)

您可以使用列表推导并创建一个新列表,其中包含从每个子列表中删除的2个元素

data = [x[:-2] for x in data]

答案 1 :(得分:2)

正如@christian所说,你有一个tuple的列表,而不是list。这里的区别很重要,因为tuple是不可变的。您可以像这样转换为list list

data = map(list, data)

现在,您可以在迭代时改变每个项目

for item in data:
     del item[-2:]

在您的情况下,列表理解更好,因为它同样适用于list tuple