{"id":2728,"date":"2016-06-07T16:00:46","date_gmt":"2016-06-07T08:00:46","guid":{"rendered":"http:\/\/ixyzero.com\/blog\/?p=2728"},"modified":"2016-06-07T16:00:46","modified_gmt":"2016-06-07T08:00:46","slug":"%e5%a6%82%e4%bd%95%e7%94%a8python%e5%88%86%e5%89%b2%e4%b8%8d%e8%bf%9e%e7%bb%ad%e7%9a%84%e6%9c%89%e5%ba%8f%e5%88%97%e8%a1%a8","status":"publish","type":"post","link":"https:\/\/ixyzero.com\/blog\/archives\/2728.html","title":{"rendered":"\u5982\u4f55\u7528Python\u5206\u5272\u4e0d\u8fde\u7eed\u7684\u6709\u5e8f\u5217\u8868"},"content":{"rendered":"<p>=Start=<\/p>\n<h5>\u7f18\u7531\uff1a<\/h5>\n<p>\u540c\u4e8b\u9700\u8981\u5b9e\u73b0\u4e00\u4e2a\u529f\u80fd\uff1a\u4ece\u6307\u5b9aIP\u6bb5\u4e2d\u6392\u9664\u67d0\u4e9bIP\u6216IP\u6bb5\uff0c\u6700\u540e\u5f97\u5230\u4e00\u4e2a\u7c7b\u4f3c\u4e8eIP\u533a\u95f4\u7684\u7ed3\u679c\u683c\u5f0f\u3002\u6bd4\u5982\uff1a<\/p>\n<pre class=\"lang:default decode:true\">$ python py_exclude_ip_cidr.py 10.32.0.0\/16 10.32.0.0\/24 10.32.26.254 10.32.104.199\n10.32.1.0-10.32.26.253\n10.32.26.255-10.32.104.198\n10.32.104.200-10.32.255.255<\/pre>\n<h5>\u6b63\u6587\uff1a<\/h5>\n<h6>\u7406\u6e05\u601d\u8def\uff1a<\/h6>\n<p>\u5c06CIDR\u683c\u5f0f\u7684IP\u6bb5\u8f6c\u6362\u6210\u5927\u6574\u6570\u533a\u95f4\u7684\u683c\u5f0f\uff0c\u7136\u540e\u518d\u4ece\u8fd9\u4e2a\u5927\u533a\u95f4\u4e2d\u5254\u9664\u300c\u8981\u6392\u9664\u7684\u5c0f\u533a\u95f4\u300d\uff0c\u7136\u540e\u5c06\u533a\u95f4\u7684\u9996\u5c3e\u6574\u6570\u8f6c\u6362\u6210IP\u5730\u5740\u7684\u683c\u5f0f\u3002<\/p>\n<h6>\u63d0\u53d6\u51fa\u7684\u95ee\u9898\uff1a<\/h6>\n<p>\u5176\u4e2d\u78b0\u5230\u7684\u4e00\u4e2a\u95ee\u9898\u5c31\u662f\uff0c\u5c06\u4e00\u4e2a\u300c\u4e0d\u4e00\u5b9a\u8fde\u7eed\u300d\u7684\u6709\u5e8f\u5217\u8868\u8f6c\u6362\u6210\u300c\u4e00\u4e2a\u6216\u591a\u4e2a\u300d\u8fde\u7eed\u6709\u5e8f\u5217\u8868\u3002<\/p>\n<h6>\u53c2\u8003\u89e3\u7b54\uff1a<\/h6>\n<p>\u5b9e\u73b0\u4e00\u4e2a\u51fd\u6570myfunc\uff0c\u4f20\u5165\u4e0d\u4e00\u5b9a\u8fde\u7eed\u7684\u5217\u8868\uff0c\u8fd4\u56de\u4e00\u4e2a\u5305\u542b\u591a\u4e2a\u533a\u95f4\u7684\u5217\u8868\uff0c\u6bd4\u5982\uff1a<\/p>\n<p>myfunc([2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20])<\/p>\n<p>\u8fd4\u56de\uff1a<\/p>\n<p>[(2,5), (12,17), 20]<\/p>\n<p>==<\/p>\n<pre class=\"lang:default decode:true\">from operator import itemgetter\nfrom itertools import groupby\n\nranges = []\ndata = [2, 3, 4, 5, 12, 13, 14, 15, 16, 17]\nfor k, g in groupby(enumerate(data), lambda (i,x):i-x):\n    group = map(itemgetter(1), g)\n    ranges.append((group[0], group[-1]))\n    print group\nprint ranges<\/pre>\n<pre class=\"lang:default decode:true \">&gt;&gt;&gt; # Show a dictionary sorted and grouped by value\uff08Python\u4e2d\u6839\u636edict\u4e2d\u5143\u7d20\u51fa\u73b0\u7684\u6b21\u6570\u8fdb\u884c\u5206\u7ec4\uff09\n&gt;&gt;&gt; from operator import itemgetter\n&gt;&gt;&gt; d = dict(a=1, b=2, c=1, d=2, e=1, f=2, g=3)\n&gt;&gt;&gt; di = sorted(d.iteritems(), key=itemgetter(1))\n&gt;&gt;&gt; for k, g in groupby(di, key=itemgetter(1)):\n...     print k, map(itemgetter(0), g)\n...\n1 ['a', 'c', 'e']\n2 ['b', 'd', 'f']\n3 ['g']\n\n&gt;&gt;&gt; # Find runs of consecutive numbers using groupby.  The key to the solution\n&gt;&gt;&gt; # is differencing with a range so that consecutive numbers all appear in\n&gt;&gt;&gt; # same group.\uff08\u5c06list\u4e2d\u8fde\u7eed\u7684\u4e32\u8fdb\u884c\u5206\u7ec4\uff09\n&gt;&gt;&gt; data = [ 1,  4,5,6, 10, 15,16,17,18, 22, 25,26,27,28]\n&gt;&gt;&gt; for k, g in groupby(enumerate(data), lambda (i,x):i-x):\n...     print map(itemgetter(1), g)\n...\n[1]\n[4, 5, 6]\n[10]\n[15, 16, 17, 18]\n[22]\n[25, 26, 27, 28]<\/pre>\n<h6>\u53c2\u8003\u94fe\u63a5\uff1a<\/h6>\n<ul>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/2154249\/identify-groups-of-continuous-numbers-in-a-list\">http:\/\/stackoverflow.com\/questions\/2154249\/identify-groups-of-continuous-numbers-in-a-list<\/a><\/li>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/2361945\/detecting-consecutive-integers-in-a-list\">http:\/\/stackoverflow.com\/questions\/2361945\/detecting-consecutive-integers-in-a-list<\/a><\/li>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/16315189\/python-find-incremental-numbered-sequences-with-a-list-comprehension\">http:\/\/stackoverflow.com\/questions\/16315189\/python-find-incremental-numbered-sequences-with-a-list-comprehension<\/a><\/li>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/3429510\/pythonic-way-to-convert-a-list-of-integers-into-a-string-of-comma-separated-rang\">http:\/\/stackoverflow.com\/questions\/3429510\/pythonic-way-to-convert-a-list-of-integers-into-a-string-of-comma-separated-rang<\/a><\/li>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/10420464\/group-list-of-ints-by-continuous-sequence\">http:\/\/stackoverflow.com\/questions\/10420464\/group-list-of-ints-by-continuous-sequence<\/a><\/li>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/33402355\/finding-groups-of-increasing-numbers-in-a-list\">http:\/\/stackoverflow.com\/questions\/33402355\/finding-groups-of-increasing-numbers-in-a-list<\/a><\/li>\n<li><a href=\"https:\/\/docs.python.org\/2.6\/library\/itertools.html#examples\">https:\/\/docs.python.org\/2.6\/library\/itertools.html#examples<\/a><\/li>\n<\/ul>\n<p>=END=<\/p>\n","protected":false},"excerpt":{"rendered":"<p>=Start= \u7f18\u7531\uff1a \u540c\u4e8b\u9700\u8981\u5b9e\u73b0\u4e00\u4e2a\u529f\u80fd\uff1a\u4ece\u6307\u5b9aIP\u6bb5\u4e2d\u6392\u9664\u67d0\u4e9bIP\u6216IP\u6bb5\uff0c\u6700\u540e\u5f97\u5230\u4e00\u4e2a\u7c7b\u4f3c\u4e8eIP\u533a\u95f4\u7684 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23,7],"tags":[617,618,619,8],"class_list":["post-2728","post","type-post","status-publish","format-standard","hentry","category-knowledgebase-2","category-programing","tag-groupby","tag-itertools","tag-operator","tag-python"],"views":3801,"_links":{"self":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/2728","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/comments?post=2728"}],"version-history":[{"count":0,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/2728\/revisions"}],"wp:attachment":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/media?parent=2728"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/categories?post=2728"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/tags?post=2728"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}