Python if语句列表理解

时间:2015-09-09 19:03:50

标签: python list python-2.7 list-comprehension

{{1}}

这段代码给了我输出 ['c','a','t','d','o','g','r','a','b','b','i','t'] < / p>

我不希望列表中有任何冗余元素。谁能告诉我我做错了什么。我想知道为什么if语句不起作用? 有没有其他方法可以使用List comprehension来完成它,这样我就不必在最初定义一个命名列表。

4 个答案:

答案 0 :(得分:4)

如果您只想要独特的字母,那么使用套装怎么样?

>>> word = ['cat', 'dog' ,'rabbit']
>>> set().union(*word)
set(['a', 'c', 'b', 'd', 'g', 'i', 'o', 'r', 't'])

如果你想保留订单,我想你可以做到

letters = "".join(word)
s = [letter for idx, letter in enumerate(letters) if letters.index(letter) == idx]

或者,如果绝对有必要在一行中进行

s = (lambda letters: [letter for idx, letter in enumerate(letters) if letters.index(letter) == idx])("".join(word))

但这两个都是O(N ^ 2),因此它们对于长列表来说是不切实际的。

答案 1 :(得分:4)

您将s定义为空列表。在重新分配给列表理解的结果之前,这不会改变;直到理解本身已经执行才能发生。因此,在代码处于理解范围内时,s仍为空,因此s.count(whatever)始终为0.

答案 2 :(得分:3)

丹尼尔罗斯曼解释了为什么你的列表理解不符合你的要求。但是如果使用传统的for循环,那么你的逻辑工作正常:

word = ['cat', 'dog' ,'rabbit']
s = []
for w in word:
    for l in w:
        if l not in s:
            s.append(l)
print s

<强>输出

['c', 'a', 't', 'd', 'o', 'g', 'r', 'b', 'i']

列表推导稍微在附加到列表时比在.append()循环中使用for更有效,因为它们使用特殊的LIST_APPEND字节码,节省了方法调用,但通常速度差是边际的。

答案 3 :(得分:0)

if语句有效,但是如果存在非冗余元素$date1 = $_POST['tst1']; $date2 = $_POST['tst2']; for($i = 0; $i < sizeof($date1); $i++){ $diff = abs(strtotime($date2[$i]) - strtotime($date1[$i])); //... } ,则需要更新s。只需将l附加到l

s

输出

word = ['cat', 'dog' ,'rabbit']
s = []
[s.append(l) for w in word for l in w if s.count(l)==0]
print s