python - 递归比较列表中的项目
问题描述
我生成了一个唯一的字符串列表。每个字符串是由冒号分隔的 6 个数字。字符串列表按第一个数字从大到小排序,然后依次按第二个、第三个等。下面的示例片段:
UniqueTierHash = [ '6:3:5:6.5:5:2.5',
'6:3:5:5.5:5:3.5',
'6:2.5:5:5:4:3',
'6:2.5:5.5:5.5:4.5:3.5',
'5.5:4.5:4.5:4.5:5.5:4.5' ]
我正在尝试获取此列表并将一个项目与下一个保留案例进行比较,其中 6 个数字中的每一个都大于或等于下一个项目。最初,我编写了一个执行此操作的函数,但它最终返回了所有字符串。这是因为随后会将较小的字符串与下一个字符串进行比较,并且由于不同,两者都将被保留。
TierHashKeep = []
for i in UniqueTierHash:
if UniqueTierHash.index(i) == len(UniqueTierHash) - 1: break
test = function.CompareTierHash(i,UniqueTierHash[UniqueTierHash.index(i) + 1])
print(i + ' \n' + UniqueTierHash[UniqueTierHash.index(i) + 1])
print(test)
if test == False:
TierHashKeep.append(i)
TierHashKeep.append(UniqueTierHash[UniqueTierHash.index(i) + 1])
elif test == True:
TierHashKeep.append(i)
else:
print('Error in TierCompare')
我怀疑我需要对 UniqueTierHash 进行某种递归评估,并在遍历列表时删除项目。任何有关如何最好地解决此问题的建议将不胜感激。谢谢。
解决方案
处理此类数据的一个好方法是将其放入 NumPy 数组中。进行过滤的一种方法是仅使用完整数组的第一行初始化一个列表,然后遍历整个数组的其他行,将每一行与新列表的最后一个元素进行比较,并将其添加到如果其所有元素都较小,则为新列表:
import numpy as np
list_of_strings = ['6:3:5:6.5:5:2.5', # data slightly changed for testing
'6:3:5:5.5:5:3.5',
'6:2.5:5:5:4:2',
'6:2.5:5.5:5.5:4.5:3.5',
'5.5:1:1:1:1:0.5']
numbers = np.array([s.split(':') for s in list_of_strings],
dtype=float)
numbers_descending = [numbers[0]]
for row in numbers[1:]:
if all(row <= numbers_descending[-1]):
numbers_descending.append(row)
numbers_descending = np.array(numbers_descending)
numbers_descending
array([[6. , 3. , 5. , 6.5, 5. , 2.5],
[6. , 2.5, 5. , 5. , 4. , 2. ],
[5.5, 1. , 1. , 1. , 1. , 0.5]])
推荐阅读
- .net - vb 在不打开新表单(或窗口)的情况下显示另一个页面
- excel - excel/电子表格网格的术语
- rabbitmq - RabbitMQ 和 Camel 2.21.1 自动确认,即使 autoAck=false
- python - 在 Python 3 中提高 FPS(使用 Pygame 渲染数千种东西)
- powershell - 使用Powershell在资源组中的资源上实现标签
- php - CSV 数据未写入数据库、SuiteCRM、自定义导入脚本
- ios - NSOperation 崩溃
- angular5 - _lazy_route_resource 惰性命名空间对象
- android - 实用地连接到 HID 键盘设备作为 android 中的输入设备
- r - R中的包Arules:在交易中附加列