我有一个列表,其中包含的字符串是“A”,“B”和“C”的组合。
例如:
abc_list = ["AB", "AC", "AB", "BC", "BB", ...]
现在我想创建一个新的列表,用一个简单的规则将每个元素再次转换为“A”、“B”和“C”。
规则如下:
如果元素是“AA”、“AB”或“BA”,则新的字符串元素必须变为“A”。如果元素是“BB”、“AC”或“CA”,则新的字符串元素必须变为“B”。如果元素是“CC”、“CB”或“BC”,则新的字符串元素必须变为“C”。
因此,新列表变为:
new_abc_list = ["A", "B", "A", "C", "B", ...]
我现在是按照下面的方法来做的,但是我有一种感觉,它可以做得更有效率。
new_abc_list = []
for element in abc_list :
if element == "AA":
new_abc_list .append("A")
elif element == "AB":
new_abc_list .append("A")
elif element == "BA":
new_abc_list .append("A")
elif element == "CB":
new_abc_list .append("C")
elif element == "CC":
new_abc_list .append("C")
elif element == "BC":
new_abc_list .append("C")
else:
new_abc_list .append("B")
return new_abc_list
什么是更有效的方法来做到这一点?
1条答案
按热度按时间vvppvyoh1#
对于字典和列表理解来说,这看起来是一个很好的工作:
输出:
复杂度是O(n),因为字典搜索是O(1)。相反,你的原始代码必须测试所有的值,直到它为循环中的每个项找到匹配。
计时
在500k项(
abc_list = ["AB", "AC", "AB", "BC", "BB"] * 100_000
)上进行6次测试:最差情况:不匹配任何测试的500k项(
abc_list = ['ZZ']*500_000
):