首先解答上一篇文章详解Python中的序列解包(2)中最后的习题,该题答案为5,表达式功能为迭代求解序列中元素的最大值。
-----------------分割线---------------
问题描述:给定任意字符串,查找其中每个字符的最后一次出现,并按每个字符最后一次出现的先后顺序依次存入列表。例如对于字符串'abcda'的处理结果为['b', 'c', 'd', 'a'],而字符串'abcbda'的处理结果为['c', 'b', 'd', 'a']。
# 测试字符串
s = 'aaaabcdawerasdfasdfwerngsnnvAAAweB3a'
# 笨办法
result = []
for ch in s:
if ch in result:
result.remove(ch)
result.append(ch)
print(result)
# 使用正则表达式
import re
print(re.findall(r'(\w)(?!.*\1)', s))
# 使用有序字典
from collections import OrderedDict
print(list(reversed(OrderedDict.fromkeys(reversed(s)))))
运行结果:
['b', 'c', 'd', 'f', 'r', 'g', 's', 'n', 'v', 'A', 'w', 'e', 'B', '3', 'a']
['b', 'c', 'd', 'f', 'r', 'g', 's', 'n', 'v', 'A', 'w', 'e', 'B', '3', 'a']
['b', 'c', 'd', 'f', 'r', 'g', 's', 'n', 'v', 'A', 'w', 'e', 'B', '3', 'a']