【发布时间】:2018-07-31 05:21:56
【问题描述】:
我不确定这是否是解决问题的最佳方法 - 我是新手,所以我会给你一些背景知识:
我设法创建了一个程序,它可以为我抓取一些网站并根据特定标准向我返回天气报告。其中一些非常相似,如果不相同的话,滚动浏览同一地区的十几个报告仍然很乏味。更有用的是,如果我可以将这些报告合并为一个,同时添加每个报告的标题。
到目前为止,我的程序所做的是将每个报告分解为:
- 标题
- 警告类型
- 正文
这些被推入一个更大的数组,其中一维的长度为 [x],另一维的长度为 [3]。
我的想法是我是否可以遍历数组并比较每个数组的正文。如果正文不同,它会跳过它,但如果它们相同,我的程序可以将标题添加到下一个,然后完全删除该条目。
结果并不理想。我已经尝试了几种不同的方法,结果好坏参半,但这是我目前所拥有的:
#Overall array as list
practice_array = []
#Sub lists
first_array = ["header 1", "warning", "body"]
second_array = ["header 2", "warning", "body"]
third_array = ["header 3", "warning", "body"]
fourth_array = ["header 4", "warning", "body"]
fifth_array = ["header 5", "warning", "body"]
#Values of practice_array
practice_array = [first_array, second_array, third_array, fourth_array,
fifth_array]
#Length of the loop
length = len(practice_array)
#Loop starts with the first item in the list
for x in range(0, length):
#The second loop starts with the next so it has something to compare
for y in range(1, length):
#If the body texts are the same then...
if practice_array[x][2] == practice_array[y][2] :
#Add the header to the other header
practice_array[y][0] += (' ' + practice_array[x][0])
#Delete the first item
del practice_array[x]
#Print for me to see
print(practice_array[y][0])
IndexError: 列表索引超出范围
【问题讨论】:
-
如果你给出一个示例输出,也就是你希望输出在结构上看起来像什么,有人可以给你写一个列表理解,它将在一行中处理这个问题。事实上,很难掌握你的最终目标是什么。
-
阅读代码,您会收到索引错误,因为您正在删除数组中的元素,因此数组长度将不再是 5。因此,当您尝试访问元素 practice_array[4][2] 时,它将失败,因为您已经删除了一个元素
-
使用上面它看起来像: practice_array[0][0] "header 1 header 2 header 3 header 4 header 5" practice_array[0][1] "warning" practice_array[0 ][2] “身体”
-
卡洛斯文,我也是这么想的。我不知道如何解决这个问题,我认为我没有以正确的方式解决这个问题。
-
@MattK 一个简单的解决方案是使用另一种数据结构来创建您的结果,如果您的身体是您的标识符,python dict 可以完美匹配。我会尝试写一个例子
标签: python arrays python-3.6 nested-lists