尝试查找列表中的所有逗号,这个有什么问题?

3
a = [',', 'hello',',', 'pear']

for i in a:
    d = 0
    c = []
    b = a[d]
    if b == ',':
        c.append(b)
        d += 1
    else:
        d += 1

print c

这段代码中有两个逗号,但是结果只返回了一个。该如何修复?

请在 for 循环之外定义 d 和 c。 - James Sapam
1
提示:正确命名你的变量。 - Bonifacio2
1
你为什么需要一个逗号列表?逗号本身并不能让你做任何事情。你是想从 a删除逗号,还是找到逗号的位置,或者其他类似的操作? - user2357112
3个回答

5
问题在于你在每次迭代开始时将 d 重置为零,并清除了 c
你需要将初始化代码移到循环外面。
在这样做的同时,你可以简化整个循环,如下所示:
a = [',', 'hello',',', 'pear']

c = []
for b in a:
    if b == ',':
        c.append(b)

print c

现在注意到像这样的代码非常适合表达为列表推导式: (参考链接)
a = [',', 'hello',',', 'pear']

c = [b for b in a if b == ',']

print c

4

您每次迭代都将一个空列表重新分配给c。 您可以按照以下方式更改逻辑

c = []                # Initialized before the loop
for i in a:
    if i[0] == ',':
        c.append(b)

最好的写法是使用列表推导式,像这样:

c = [item for item in a if item == ","]

这种理解列表的方法被称为过滤列表。

c = list(',' * a.count(',')) 可能是另一种解决方案。 - Matthias
@Matthias 或者简单地使用[","] * a.count(",") ;) - thefourtheye
或者,如果你想要多样性,可以使用 filter(','.__eq__, a) - Steve Jessop

1
a = [',', 'hello',',', 'pear']
print len([x for x in a if x == ','])

实际上他想修复他的代码片段。 - James Sapam
@yopy 不好意思!我想我可以留下我的回答,因为它以另一种方式解决了问题。 :) - moodh
可以的 :) 我能理解。 - James Sapam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接