我知道这听起来可能是一个基本问题,但是我最近正在阅读列表理解。然后我尝试了以下代码,但它给了我一个错误(语法无效)。
r=0
# x=[r=r+1 for c in l1 if l1.count(c) == 1] --> **Invalid syntax**
for c in l1 : # **But this works in loop**
if l1.count(c)==1 :
r+=1
print(r)
Sp问题出在哪里??
答案 0 :(得分:0)
您可以创建一次出现的字符列表。由于它们只出现一次,因此不会在您的列表中重复。
或者,如果您希望使用其他长度,请改用{}
集(不重复)
unique_chars = [ c for c in l1 if l1.count(c)==1 ]
print(len(unique_chars))
答案 1 :(得分:0)
yield
是无效的语法,因为列表理解中不能包含赋值运算符。
如果要使用列表推导,如果元素出现1,则将其计数为1,否则为0,然后将计数求和
[r=r+1 for c in l1 if l1.count(c) == 1]
输出将为l1 = ['a','b','c','c','d','e']
#Count 1 for an element occuring once, otherwise count 0, and sum up the counts
r = sum([1 if l1.count(c) == 1 else 0 for c in l1])
print(r)
另一种方法是使用collections.Counter计算字符的频率并计算1个值的数量。
4
输出将为from collections import Counter
l1 = ['a','b','c','c','d','e']
#Take a counter
c = Counter(l1)
#Count 1 for an element occuring once, otherwise count 0, and sum up the counts
r = sum([1 if v == 1 else 0 for v in c.values()])
print(r)
答案 2 :(得分:0)
我想你只是想做到这一点。
l1 = [1,2,3,4,5,6,7,8,2,6,8]
print(len([x for x in l1 if l1.count(x)==1]))
output-> 5
即(1,3,4,5,7
)
答案 3 :(得分:0)
列表推导中不能包含作业。据我了解,您正在尝试计算列表中的唯一项,因此您可以通过一种非常简单的方式来做到这一点:
r = len([x for x in l1 if l1.count(x) == 1])
print(r)