在Python中删除字符串中每个元素的第一项

时间:2012-02-05 22:21:58

标签: python list

我在python中有一个列表。此列表中包含子列表。 例如:

 [['85.', 'Document', 'will', 'discuss', 'allegations,', 'or', 'measures', 'being', 'taken', 'against,', 'corrupt', 'public', 'officials', 'of', 'any', 'governmental', 'jurisdiction', 'worldwide.'], ['56.', 'Document', 'will', 'include', 'a', 'prediction', 'about', 'the', 'prime', 'lending', 'rate,', 'or', 'will', 'report', 'an', 'actual', 'prime', 'rate', 'move.'], and so on]

当我打印mylist [0]时,我得到以下内容:

['85.', 'Document', 'will', 'discuss', 'allegations,', 'or', 'measures', 'being', 'taken', 'against,', 'corrupt', 'public', 'officials', 'of', 'any', 'governmental', 'jurisdiction', 'worldwide.']

当我打印mylist [0] [0]时,我得到85.

我是python的新手,我不明白如何在for循环中访问这些值(85,56等),这样我就可以删除所有数字。即85,56等。

  1. 我也有一个类似的列表[[1, 23], [2, 34], [3, 45], [1, 45], [2, 44]] 我想添加第一个元素相同的所有第二个元素。即我想添加23 + 45(因为两者都有1作为他们的第一个元素)。我理解我需要一个for循环,但我是python的新手,我无法理解循环。

3 个答案:

答案 0 :(得分:1)

获取所有第一个元素:

zip(*your_list)[0]

zip(*some_iterable)进行某种矩阵求逆 - 你应该用它来做一些想法。

要从一组可迭代中删除所有第一个值,您可以选择几种方法。 E.g:

[item[1:] for item in your_list]  # probably the best
zip(*zip(*your_list)[1:])  # tricky and probably slow one

要总结你的价值,你需要一本字典:

>>> from collections import defaultdict
>>> l = [[1, 23], [2, 34], [3, 45], [1, 45], [2, 44]]
>>> d = defaultdict(int)
>>> for item in l:
    d[item[0]] += item[1]

>>> d.items()
[(1, 68), (2, 78), (3, 45)]

我们在此使用defaultdict来执行此d[item[0]] += item[1]分配。简单dict我们得到KeyError,因为我们的d为空。但在这种情况下defaultdict只返回默认值 - int(),即0

答案 1 :(得分:1)

基本上,python将mylist [0] [0]的每个部分视为2个单独的命令。 第一个电话:mylist[0]返回

    ['85.', 'Document', 'will', 'discuss', 'allegations,', 'or', 'measures', 'being', 'taken', 'against,', 'corrupt', 'public', 'officials', 'of', 'any', 'governmental', 'jurisdiction', 'worldwide.']

这是原始列​​表中的第一项。第二部分获取THAT列表的<first call>[0]或第0个元素。它应该返回85

为了访问下一个列表的第一个元素,你可以使用mylist[1][0](获取第二个元素,返回该列表中的第一个元素......

要获取 all 列表中的第一个元素列表,请使用列表解析:

    first_items = [item[0] for item in mylist]
    print(first_items)
    ...
    [85, 56,... and so on]

要“删除”列表中的所有第一个元素,您可以执行称为切片的操作。您可以使用每个列表的第二个元素(依此类推)创建一个新列表:

    new_list = [item[1:] for item in mylist]

答案 2 :(得分:1)

第一个问题:

first_values = [int(sublist[0]) for sublist in data]

对于你的第二个问题:

x = [[1, 23], [2, 34], [3, 45], [1, 45], [2, 44]]

dicto = {}

for sublist in x:
    try:
        dicto[sublist[0]] = dicto[sublist[0]] + sublist[1]
    except KeyError:
        dicto[sublist[0]] = sublist[1]