2015-10-15 24 views
1

说我有以下列表合并元素在列表中,如果他们在一定的unicode范围

['\U0001f680', '\U0001f618', '\U0001f44d\U0001f3fe', '\U0001f1e6', '\U0001f1ee'] 

现在我想合并两个连续的元素,如果这两个元素是在U+1F1E6范围到U+1F1FF,因此所得到的名单应该是

['\U0001f680', '\U0001f618', '\U0001f44d\U0001f3fe', '\U0001f1e6\U0001f1ee'] 

因此,实际上有两个问题:

  1. 如何检查一个unicode是否在一定范围之间?将unicode转换为代码点并比较这些?
  2. 如何有效比较并创建一个新的列表?一些pythonic方式与列表理解?

我正在运行Python 3.5 btw。

+0

对于2.我会使用itertools.combinations。 – Noxeus

+1

@Hashirun你能确定字符串总是单个字符/最多2个字符吗? –

+0

@AnandSKumar在他们的列表中的项目之一看起来可能是2 *'\ U0001f44d \ U0001f3fe'* – SuperBiasedMan

回答

1

我对unicode的理解并不是很了解您当前对范围的请求。它并不尽如此简洁,但我试图说明元素包含多个字符的情况。我也给任意unicode范围..希望这是一些帮助。

a = ['\U0001f680', '\U0001f618', '\U0001f44d\U0001f3fe', '\U0001f1e6', '\U0001f1ee'] 
aa = {x: ord(x.decode('unicode-escape')) if x.count('\\') < 2 else 1 for x in a} 

low = 127460 
high = 127475 

[(y,x) if (high >= aa[x] >= low and high >= aa[y] >= low) else y for x,y in zip(aa.keys()[1:],aa.keys()[:-1])] 
相关问题