arcmap 是啥中了?做啥用的?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arcmap 是啥中了?做啥用的?相关的知识,希望对你有一定的参考价值。
参考技术A ArcMap是一个用于编辑、显示、查询和分析地图数据的以地图为核心的模块,ArcMap含一个复杂的专业制图和编辑系统,既是一个面向对象的编辑器,又是一个完整的数据表生成器。ArcMap不仅可以看成是能够完成制图和编辑任务的ARCEDIT和ARCPLOT的合并,而且是类似CAD结构的智能化地图生成工具,是一个使用简单、功能强大的集成应用环境.提供了数据视图(Data View)和版面视图(Layout View)两种中浏览数据的方法,在数据视图中,用户无须关心诸如指北针等的地图要素就可以与地图进行交互;版面视图是一个包含制图要素的虚拟页,它显示数据窗口中的所有数据。几乎所有能在数据视图中对数据进行的操作都可以在视图版面中完成. 参考技术B arcgis里面的用于地理信息系统中地图显示的本回答被提问者采纳
itertools.groupby() 是做啥用的?
【中文标题】itertools.groupby() 是做啥用的?【英文标题】:What is itertools.groupby() used for?itertools.groupby() 是做什么用的? 【发布时间】:2017-05-15 15:43:37 【问题描述】:在阅读 python 文档时,我遇到了itertools.groupby()
功能。这不是很简单,所以我决定在 *** 上查找一些信息。我从How do I use Python's itertools.groupby()? 找到了一些东西。
这里和文档中似乎很少有关于它的信息,所以我决定发布我对 cmets 的观察。
谢谢
【问题讨论】:
你检查grouby()
document了吗?哪一部分不直截了当?
@MoinuddinQuadri OP的问题的第一句话说他们阅读了Python文档。
您提出的问题已准备好详尽的答案?真的吗?为什么不在问题中包含所有这些,而将答案部分留给讨论?
@hiroprotagonist It's perfectly acceptable to ask a question for the sole purpose of answering it。我自己做过。 “为什么不在问题中包含所有内容”因为答案不是问题的一部分。答案就是答案。
@EmettSpeer 我的实际问题是“这其中哪一部分不是直截了当的?”。我提到文档的链接只是为了确保 OP 检查了官方 Python 文档,而不是任何教程
【参考方案1】:
与往常一样,documentation of the function 应该是第一个要检查的地方。然而itertools.groupby
肯定是最棘手的itertools
之一,因为它有一些可能的陷阱:
如果它们的key
-result 对于连续的项目是相同的,它只会对项目进行分组:
from itertools import groupby
for key, group in groupby([1,1,1,1,5,1,1,1,1,4]):
print(key, list(group))
# 1 [1, 1, 1, 1]
# 5 [5]
# 1 [1, 1, 1, 1]
# 4 [4]
之前可以使用sorted
- 如果想要整体使用groupby
。
它产生两个项目,第二个是一个迭代器(所以需要迭代第二个项目!)。在前面的示例中,我明确需要将这些转换为 list
。
如果推进groupby
-iterator,则丢弃第二个产生的元素:
it = groupby([1,1,1,1,5,1,1,1,1,4])
key1, group1 = next(it)
key2, group2 = next(it)
print(key1, list(group1))
# 1 []
即使group1
不为空!
正如已经提到的,可以使用sorted
进行整体groupby
操作,但效率极低(如果您想在生成器上使用 groupby,则会丢弃内存效率)。如果您不能保证输入是 sorted
(也不需要 O(n log(n))
排序时间开销),还有更好的选择:
collections.defaultdict
iteration_utilities.groupedby
可能更多。
但是,检查本地属性非常棒。 itertools
-recipes section里有两个菜谱:
def all_equal(iterable):
"Returns True if all the elements are equal to each other"
g = groupby(iterable)
return next(g, True) and not next(g, False)
和:
def unique_justseen(iterable, key=None):
"List unique elements, preserving order. Remember only the element just seen."
# unique_justseen('AAAABBBCCDAABBB') --> A B C D A B
# unique_justseen('ABBCcAD', str.lower) --> A B C A D
return map(next, map(itemgetter(1), groupby(iterable, key)))
【讨论】:
谢谢。如果我需要一些替代品,我一定会注意的。现在我正在逐节阅读文档,以免混淆所有内容。祝你新年快乐 这里有很棒的信息。collections.defaultdict
的文档有一个关于如何对值进行分组的非常简单的示例:docs.python.org/3/library/collections.html#defaultdict-examples【参考方案2】:
首先,您可以阅读文档here。
我将把我认为最重要的一点放在首位。我希望通过示例后原因会变得清晰。
始终使用用于分组的相同键对项目进行排序以避免意外结果
itertools.groupby(iterable, key=None or some func)
获取可迭代的列表并根据指定的键对它们进行分组。键指定对每个单独的迭代应用什么操作,然后将其结果用作每个项目分组的标题;最终具有相同“键”值的项目将最终在同一组中。
返回值是一个类似于字典的可迭代对象,其格式为key : value
。
示例 1
# note here that the tuple counts as one item in this list. I did not
# specify any key, so each item in the list is a key on its own.
c = groupby(['goat', 'dog', 'cow', 1, 1, 2, 3, 11, 10, ('persons', 'man', 'woman')])
dic =
for k, v in c:
dic[k] = list(v)
dic
结果
1: [1, 1],
'goat': ['goat'],
3: [3],
'cow': ['cow'],
('persons', 'man', 'woman'): [('persons', 'man', 'woman')],
10: [10],
11: [11],
2: [2],
'dog': ['dog']
示例 2
# notice here that mulato and camel don't show up. only the last element with a certain key shows up, like replacing earlier result
# the last result for c actually wipes out two previous results.
list_things = ['goat', 'dog', 'donkey', 'mulato', 'cow', 'cat', ('persons', 'man', 'woman'), \
'wombat', 'mongoose', 'malloo', 'camel']
c = groupby(list_things, key=lambda x: x[0])
dic =
for k, v in c:
dic[k] = list(v)
dic
结果
'c': ['camel'],
'd': ['dog', 'donkey'],
'g': ['goat'],
'm': ['mongoose', 'malloo'],
'persons': [('persons', 'man', 'woman')],
'w': ['wombat']
现在是排序版本
# but observe the sorted version where I have the data sorted first on same key I used for grouping
list_things = ['goat', 'dog', 'donkey', 'mulato', 'cow', 'cat', ('persons', 'man', 'woman'), \
'wombat', 'mongoose', 'malloo', 'camel']
sorted_list = sorted(list_things, key = lambda x: x[0])
print(sorted_list)
print()
c = groupby(sorted_list, key=lambda x: x[0])
dic =
for k, v in c:
dic[k] = list(v)
dic
结果
['cow', 'cat', 'camel', 'dog', 'donkey', 'goat', 'mulato', 'mongoose', 'malloo', ('persons', 'man', 'woman'), 'wombat']
'c': ['cow', 'cat', 'camel'],
'd': ['dog', 'donkey'],
'g': ['goat'],
'm': ['mulato', 'mongoose', 'malloo'],
'persons': [('persons', 'man', 'woman')],
'w': ['wombat']
示例 3
things = [("animal", "bear"), ("animal", "duck"), ("plant", "cactus"), ("vehicle", "harley"), \
("vehicle", "speed boat"), ("vehicle", "school bus")]
dic =
f = lambda x: x[0]
for key, group in groupby(sorted(things, key=f), f):
dic[key] = list(group)
dic
结果
'animal': [('animal', 'bear'), ('animal', 'duck')],
'plant': [('plant', 'cactus')],
'vehicle': [('vehicle', 'harley'),
('vehicle', 'speed boat'),
('vehicle', 'school bus')]
现在是排序版本。我在这里将元组更改为列表。无论哪种方式,结果都相同。
things = [["animal", "bear"], ["animal", "duck"], ["vehicle", "harley"], ["plant", "cactus"], \
["vehicle", "speed boat"], ["vehicle", "school bus"]]
dic =
f = lambda x: x[0]
for key, group in groupby(sorted(things, key=f), f):
dic[key] = list(group)
dic
结果
'animal': [['animal', 'bear'], ['animal', 'duck']],
'plant': [['plant', 'cactus']],
'vehicle': [['vehicle', 'harley'],
['vehicle', 'speed boat'],
['vehicle', 'school bus']]
【讨论】:
"itertools.groupby(iterable, key=None or some func)
采用可迭代列表" 它采用可迭代列表还是仅采用可迭代列表?列表是可迭代的。
文档没有明确说明。但是从我发布的示例中,您可以看到我同时使用了列表和嵌套列表。因此它可以采用“可迭代”(示例 1)以及“可迭代列表”(示例 2)。你甚至可以传入一个字符串,你仍然可以做生意以上是关于arcmap 是啥中了?做啥用的?的主要内容,如果未能解决你的问题,请参考以下文章