獲得任意n個區分度最高的rgb顏色值是乙個經典的問題,之前在做一些視覺化的東西時需要解決這個問題。首先去網上找了一些方法,未果,於是想自己來搞,心裡的想法是,先給出乙個距離函式用來度量兩個rgb顏色值的區分度,然後再通過隨機和貪心的方式依次獲得n個顏色值。如果要這樣搞的話,距離函式的定義就非常關鍵了,這就避免不了要去看一些學術**,想著就有點畏懼,又要查文獻、讀文獻,感覺要花好幾天時間。於是就先放下了,用隨機生成顏色的方法來解決,但是效果很不好。今天又認真的查了一些資料,發現10年前,已經有人在stack overflow上問過了,其中第二個回答很全面,獲讚最多,既給出了一些文獻研究,又在n比較小的情況下給出了一些簡單的解決方案。第乙個回答的獲讚也不少,而且非常簡單,在這裡,我就選了第乙個回答用python實現了一下,其思路是先通過隨機的方式獲得n個區分度比較高的hls顏色值,然後再將其轉換為rgb顏色,**如下所示(github位址)。
import colorsys
import random
def get_n_hls_colors(num):
hls_colors =
i = 0
step = 360.0 / num
while i < 360:
h = i
s = 90 + random.random() * 10
l = 50 + random.random() * 10
_hlsc = [h / 360.0, l / 100.0, s / 100.0]
i += step
return hls_colors
def ncolors(num):
rgb_colors =
if num < 1:
return rgb_colors
hls_colors = get_n_hls_colors(num)
for hlsc in hls_colors:
_r, _g, _b = colorsys.hls_to_rgb(hlsc[0], hlsc[1], hlsc[2])
r, g, b = [int(x * 255.0) for x in (_r, _g, _b)]
return rgb_colors
使用Python獲得本機IP位址
使用撥號上網的話,一般都有乙個本地ip和乙個外網ip,使用python可以很容易的得到這兩個ip 使用gethostbyname和gethostbyname ex兩個函式可以實現 import socket localip socket.gethostbyname socket.gethostnam...
python 隨機選取n個元素
參考鏈結 import random data a b c d e f g h random.choice data 隨機選取乙個元素import random data a b c d e f g h sample num 5 random.sample data,sample num 結果 a ...
Python 尋找第n個尼爾森係數
尋找第n個默尼森數。格式如下 def prime num def monisen no return print monisen input 此處不需要自己輸入,只要寫這樣一條語句即可,主要完成monisen 函式 print monisen int input in python 3.x 5分 題...