在多维数组中追加和搜索
Appending and searching in a multidimensional array
所以我的问题是我想将某物的名称附加到数组和一个计数。
test_array = []
test_array.append(['apples', 2])
test_array.append(['oranges', 5])
test_array.append(['bananas', 1])
print(*test_array)
['apples', 2]
['oranges', 5]
['bananas', 1]
现在我想通过我正在计数的事物的名称搜索我的二维数组,并将 1 添加到第二列
test_array['oranges'][1] = test_array['oranges'][1]+1
在将 1 添加到第二列之前,我会测试该项目是否存在
if test_array['string'] != None:
test_array.append['string', ]
我不确定这是否可行,或者我是否只需要在数组的整个第一列中搜索该项目,然后再添加到列表中。我将对 37,731,481 个项目执行此操作,因此我需要一种方法来搜索希望在 运行 时间内不会二次的字符串,因此我可能只是按字符串对列表进行排序并进行二分搜索。
我建议您使用映射而不是嵌套列表,最好是 collections.Counter
对象。这些项目将是键,它们的计数将是值。然后可以在恒定时间内搜索密钥 - O(1).
from collections import Counter
dct = Counter()
dct['apples'] = 2
dct['oranges'] = 5
dct['bananas'] = 1
print dct
# Counter({'oranges': 5, 'apples': 2, 'bananas': 1})
而且您不需要测试 add/update 值的键是否存在:
# updating a key (which is not in the counter)
dct['mango'] += 3
print dct
# Counter({'oranges': 5, 'apples': 2, 'mango': 3, 'bananas': 1})
这是因为 collections.Counter
对象与香草字典不同,对于丢失的键总是 return 零而不是引发 KeyError.
如果您需要管理负计数,Counter
对象将不是最佳选择。您可以使用 collections.defaultdict
对象来代替 default_factory int
函数:
from collections import defaultdict:
dct = defaultdict(int)
...
工作方式与 Counter
相同,但负数现在已得到正确处理。
所以我的问题是我想将某物的名称附加到数组和一个计数。
test_array = []
test_array.append(['apples', 2])
test_array.append(['oranges', 5])
test_array.append(['bananas', 1])
print(*test_array)
['apples', 2]
['oranges', 5]
['bananas', 1]
现在我想通过我正在计数的事物的名称搜索我的二维数组,并将 1 添加到第二列
test_array['oranges'][1] = test_array['oranges'][1]+1
在将 1 添加到第二列之前,我会测试该项目是否存在
if test_array['string'] != None:
test_array.append['string', ]
我不确定这是否可行,或者我是否只需要在数组的整个第一列中搜索该项目,然后再添加到列表中。我将对 37,731,481 个项目执行此操作,因此我需要一种方法来搜索希望在 运行 时间内不会二次的字符串,因此我可能只是按字符串对列表进行排序并进行二分搜索。
我建议您使用映射而不是嵌套列表,最好是 collections.Counter
对象。这些项目将是键,它们的计数将是值。然后可以在恒定时间内搜索密钥 - O(1).
from collections import Counter
dct = Counter()
dct['apples'] = 2
dct['oranges'] = 5
dct['bananas'] = 1
print dct
# Counter({'oranges': 5, 'apples': 2, 'bananas': 1})
而且您不需要测试 add/update 值的键是否存在:
# updating a key (which is not in the counter)
dct['mango'] += 3
print dct
# Counter({'oranges': 5, 'apples': 2, 'mango': 3, 'bananas': 1})
这是因为 collections.Counter
对象与香草字典不同,对于丢失的键总是 return 零而不是引发 KeyError.
如果您需要管理负计数,Counter
对象将不是最佳选择。您可以使用 collections.defaultdict
对象来代替 default_factory int
函数:
from collections import defaultdict:
dct = defaultdict(int)
...
工作方式与 Counter
相同,但负数现在已得到正确处理。