我的列表理解代码中的错误在哪里?

时间:2019-05-17 07:56:50

标签: python-3.x

我知道这听起来可能是一个基本问题,但是我最近正在阅读列表理解。然后我尝试了以下代码,但它给了我一个错误(语法无效)。

 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问题出在哪里??

4 个答案:

答案 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)