Abh*_*mar 5 python list python-3.x
l1 = ['A','B','C','D','A','B']
l2 = []
Run Code Online (Sandbox Code Playgroud)
'C'是列表l1中的第一个值,我想创建一个函数,以便它在l2中返回C.
Sha*_*ger 10
在3.6及更高版本中,这非常容易.既然dict
保留了插入顺序,collections.Counter
可以用来有效地计算单个遍中的所有元素,那么你只需扫描结果Counter
就可以找到计数为1的第一个元素:
from collections import Counter
l1 = ['A','B','C','D','A','B']
l2 = [next(k for k, v in Counter(l1).items() if v == 1)]
Run Code Online (Sandbox Code Playgroud)
工作是严格的O(n)
,只需要输入一次输入(加上Counter
自身中唯一值的部分传递),代码非常简单.在现代Python中,Counter
甚至还有一个C加速器,用于计算输入,将所有Counter
构造工作推送到C层,使其无法击败.如果您想要考虑不存在这样的元素的可能性,只需包装l2
初始化以使其成为:
try:
l2 = [next(k for k, v in Counter(l1).items() if v == 1)]
except StopIteration:
l2 = []
# ... whatever else makes sense for your scenario ...
Run Code Online (Sandbox Code Playgroud)
或者避免使用异常处理itertools.islice
(l2
0-1个项目,一旦找到命中,它仍然会短路):
from itertools import islice
l2 = list(islice((k for k, v in Counter(l1).items() if v == 1), 1))
Run Code Online (Sandbox Code Playgroud)
您可以使用字符串的函数转换并list
比较string
左右index
每个字符。一旦找到第一个匹配项,它就会停止计数,find
rfind
l1 = ['A','B','C','D','A','B']
def i_list(input):
l1 = ''.join(input)
for i in l1:
if l1.find(i) == l1.rfind(i):
return(i)
print(i_list(l1))
# output
C
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
94 次 |
最近记录: |