.grid-item {
width: 160px;
height: 120px;
float: left;
/* vertical gutter */
margin-bottom: 20px;
background: #D26;
border: 2px solid #333;
border-color: hsla(0, 0%, 0%, 0.5);
border-radius: 5px;
}
'C'是列表l1中的第一个值,我想创建一个函数,使其在l2中返回C。
答案 0 :(得分: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)]
严格来说,工作是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 ...
或避免使用itertools.islice
处理异常(因此l2
是0-1项,一旦找到匹配项,它仍然会短路):
from itertools import islice
l2 = list(islice((k for k, v in Counter(l1).items() if v == 1), 1))
答案 1 :(得分:1)
您可以将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
答案 2 :(得分:1)
使用defaultdict的实现:
# Initialize
from collections import defaultdict
counts = defaultdict(int)
# Count all occurrences
for item in l1:
counts[item] += 1
# Find the first non-duplicated item
for item in l1:
if counts[item] == 1:
l2 = [item]
break
else:
l2 = []
答案 3 :(得分:1)
作为ShadowRanger's answer的后续版本,如果您使用的是较低版本的Python,则过滤原始列表并没有那么复杂,因此您不必依靠柜台物品的顺序:
from collections import Counter
l1 = ['A','B','C','D','A','B']
c = Counter(l1)
l2 = [x for x in l1 if c[x] == 1][:1]
print(l2) # ['C']
这也是 O(n)。
答案 4 :(得分:0)
我们也可以使用“ numpy”来做到这一点。
def find_first_non_duplicate(l1):
indexes_counts = np.asarray(np.unique(l1, return_counts=True, return_index=True)[1:]).T
(not_duplicates,) = np.where(indexes_counts[:, 1] == 1)
if not_duplicates.size > 0:
return [l1[np.min(indexes_counts[not_duplicates, 0])]]
else:
return []
print(find_first_non_duplicate(l1))
# output
['C']
答案 5 :(得分:0)
dict
中。遍历dict
并检查计数为
def countElement(a):
"""
returns a dict of element and its count
"""
g = {}
for i in a:
if i in g:
g[i] +=1
else:
g[i] =1
return g
#List to be processed - input_list
input_list = [1,1,1,2,2,2,2,3,3,4,5,5,234,23,3,12,3,123,12,31,23,13,2,4,23,42,42,34,234,23,42,34,23,423,42,34,23,423,4,234,23,42,34,23,4,23,423,4,23,4] #Input from user
try:
if input_list: #if list is not empty
print ([i for i,v in countElement(input_list).items() if v == 1][0]) #get the first element whose count is 1
else: #if list is empty
print ("empty list in Input")
except: #if list is empty - IndexError
print (f"Only duplicate values in list - {input_list}")