合并列表中的元素,如果它们在特定的 unicode 范围内
Merge elements in a list, if they are in a certain unicode range
假设我有以下列表
['\U0001f680', '\U0001f618', '\U0001f44d\U0001f3fe', '\U0001f1e6', '\U0001f1ee']
现在我想合并两个连续的元素,如果两个元素都在U+1F1E6
到U+1F1FF
的范围内,那么结果列表应该是
['\U0001f680', '\U0001f618', '\U0001f44d\U0001f3fe', '\U0001f1e6\U0001f1ee']
所以其实有两个问题:
- 如何检查一个unicode是否在某个范围内?将 unicode 转换为代码点并进行比较?
- 如何有效地比较并从中创建新列表?列表理解的一些 pythonic 方式?
我 运行 Python 3.5 顺便说一句。
我不太熟悉 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])]
假设我有以下列表
['\U0001f680', '\U0001f618', '\U0001f44d\U0001f3fe', '\U0001f1e6', '\U0001f1ee']
现在我想合并两个连续的元素,如果两个元素都在U+1F1E6
到U+1F1FF
的范围内,那么结果列表应该是
['\U0001f680', '\U0001f618', '\U0001f44d\U0001f3fe', '\U0001f1e6\U0001f1ee']
所以其实有两个问题:
- 如何检查一个unicode是否在某个范围内?将 unicode 转换为代码点并进行比较?
- 如何有效地比较并从中创建新列表?列表理解的一些 pythonic 方式?
我 运行 Python 3.5 顺便说一句。
我不太熟悉 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])]