Python 将子列表的最后一个元素追加到列表中

Python 将子列表的最后一个元素追加到列表中,python,Python,我有一个列表,我需要将最后一个元素添加到一个新列表中。 我的第一个函数输出的小示例: 上下文:数据是空字典,我也添加了列表列表 ['PANAMA', ['2006/10/18', '5.0'], ['2006/10/14', '4.8']] ['MISSOURI', ['2006/10/18', '3.4']] ['INDONESIA', ['2006/10/18', '4.9'], ['2006/10/18', '4.9']] 这些列表来自一个包含地震数据的文件,下面是我的项目代码: imp

我有一个列表,我需要将最后一个元素添加到一个新列表中。 我的第一个函数输出的小示例: 上下文:数据是空字典,我也添加了列表列表

['PANAMA', ['2006/10/18', '5.0'], ['2006/10/14', '4.8']]
['MISSOURI', ['2006/10/18', '3.4']]
['INDONESIA', ['2006/10/18', '4.9'], ['2006/10/18', '4.9']]
这些列表来自一个包含地震数据的文件,下面是我的项目代码:

import matplotlib.pyplot as plt
from itertools import islice
from operator import itemgetter


def get_list(data, key):
    r_list = [key]
    for i in data:
        if i == key:
            for j in data[key]:
                r_list.append(j)
            break
# Return the list.
   return r_list


def main():
    f = open("earthquakes.txt")
    data = {}
    for line in f.readlines():
        list1 = line.split()
        dat_mag = [list1[1], list1[0]]
    if list1[len(list1) - 1] in data:
        data[list1[len(list1) - 1]].append(dat_mag)
    else:
        data[list1[len(list1) - 1]] = [dat_mag]
    for key in data:
        print(get_list(data, key))

    ric_scale = list(map(itemgetter(-1), islice(data, 1, None)))
    print(ric_scale)

    plt.hist(ric_scale, bins=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

    plt.xlabel('Magnitudes')
    plt.ylabel('Occurrences')
    plt.title('Earthquake Intensity')

    plt.show()


main()
我需要得到最终值:“5.0”、“4.8”等。这只是文件的一个小样本。我该怎么做,到目前为止,我的代码是国家的最后一个字母。我需要它在清单上注明日期和震级

  ric_scale = []
  for sublist in data:
      ric_scale.append(sublist[-1])
我的预期产出是:

[5.0, 4.8, 3.4, 4.9, 4.9]

我计划使用震级创建一个MPL柱状图。

如果格式确实一致,您可以跳过第一个国家名称[1:]

ric_scale = []
  for sublist in data[1:]:
      ric_scale.append(sublist[-1])

如果格式确实一致,您可以通过[1:]跳过第一个国家名称

ric_scale = []
  for sublist in data[1:]:
      ric_scale.append(sublist[-1])

仅为了好玩,无大型临时解决方案作为忽略导入的一行程序:

from itertools import islice
from operator import itemgetter

ric_scale = list(map(itemgetter(-1), islice(data, 1, None)))
零碎解释:

islicedata,1,None生成一个迭代器,该迭代器生成从索引1开始的所有值,并跳过索引0(没有值的国家名称)。 mapitemgetter-1。。。生成另一个迭代器,该迭代器有效地从输入中的所有值中提取最后一个元素 列表使用该迭代器一次生成最终列表[*mapitemgetter-1,islicedata,1,None]也可以工作,而且速度要快得多,使用解包语法通过语法而不是命名构造函数生成列表。
明确地说,不能保证这是更快的,对于短输入,它将是较慢的;固定开销更高,即使每个元素的开销可能略低。

仅为了好玩,作为一个忽略导入的单行程序的无大临时解决方案:

from itertools import islice
from operator import itemgetter

ric_scale = list(map(itemgetter(-1), islice(data, 1, None)))
零碎解释:

islicedata,1,None生成一个迭代器,该迭代器生成从索引1开始的所有值,并跳过索引0(没有值的国家名称)。 mapitemgetter-1。。。生成另一个迭代器,该迭代器有效地从输入中的所有值中提取最后一个元素 列表使用该迭代器一次生成最终列表[*mapitemgetter-1,islicedata,1,None]也可以工作,而且速度要快得多,使用解包语法通过语法而不是命名构造函数生成列表。
明确地说,不能保证这是更快的,对于短输入,它将是较慢的;固定开销更高,即使每个元素的开销可能略低。

使用列表理解:

res=[floatj[-1]表示i中的i,如果i是instancej,则表示i中的j,列表] 其中j是数据中每个列表i中的项目

输出:

[5.0, 4.8, 3.4, 4.9, 4.9]

使用列表理解:

res=[floatj[-1]表示i中的i,如果i是instancej,则表示i中的j,列表] 其中j是数据中每个列表i中的项目

输出:

[5.0, 4.8, 3.4, 4.9, 4.9]

您可以使用if typeitem is list来决定列表项本身是否也是列表。您的输入是3个不同的列表。这三个都在外部列表中吗?@Carcigenicate是的,是的consistent@Nick我想创建一个数字列表,这样我就可以创建一个带有matplotlib的直方图,并将其添加到@Nick中:该示例数据作为单个数据结构在语法上是不合法的。这是三个不相关的列表,其中一个后面有一个逗号,可以将它包装成一个元组。您能否提供正在处理的实际数据结构,而不是handwave?数据肯定不是一个字典,你对它进行迭代,得到的值可以直接索引到-1,而无需在数据中查找键。你可以使用if typeitem是list来决定列表项本身是否也是list。你的输入是3个不同的list。这三个都在外部列表中吗?@Carcigenicate是的,是的consistent@Nick我想创建一个数字列表,这样我就可以创建一个带有matplotlib的直方图,并将其添加到@Nick中:该示例数据作为单个数据结构在语法上是不合法的。这是三个不相关的列表,其中一个后面有一个逗号,可以将它包装成一个元组。您能否提供正在处理的实际数据结构,而不是handwave?数据肯定不是一个字典,你在它上面迭代,得到的值可以直接索引到-1,而不需要在数据中查找键。