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,而不需要在数据中查找键。