合并列表中的元素(如果它们位于某个unicode范围内)

时间:2015-10-15 14:12:15

标签: python list unicode list-comprehension

说我有以下列表

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

现在我想合并两个连续的元素,如果两个元素都在U+1F1E6U+1F1FF的范围内,那么结果列表应该是

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

所以实际上有两个问题:

  1. 如何检查unicode是否介于某个范围之间?将unicode转换为代码点并进行比较?
  2. 如何有效地比较和创建新列表?一些pythonic方式与列表理解?
  3. 我正在运行Python 3.5 btw。

1 个答案:

答案 0 :(得分: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])]