n
是一个整数,xs
是一个整数列表。
n = 2
xs = [1, 2, 3, 4, 5, 6]
def multiples(n,xs):
empty = []
for i in range(len(xs)):
if xs[i] % n == 0:
print(xs[i])
return empty
它应该在三个单独的行中给出2,4,6的输出。我有没有办法将它们合并到一个没有空格和只有逗号的列表中?
n=3
xs=[11, 13]
输出会变成'[]',空集吗?
答案 0 :(得分:2)
您只需将for
循环更改为:
print(",".join(str(x) for x in xs if not x % n))
一个完成所有操作的生成器表达式。我假设您的return empty
行只是缩进不正确,因为在缩进处,它只打印第一行。
答案 1 :(得分:0)
您的代码中存在一些问题。第一个问题是你只检查数组中的第一个元素,然后退出函数。因此,您实际上从未完成对整个列表的迭代。
其次,您只是打印出您的项目,并根据您的要求,并根据您创建名为empty
的列表的事实,您希望收集此数据并在完成后输出。
话虽如此,你要做的是改变你的印刷陈述以附加到你的清单:
empty.append(xs[i])
然后当你完成你的for循环返回空。
像这样:
def multiples(n,xs):
empty = []
for i in range(len(xs)):
if xs[i] % n == 0:
empty.append(xs[i])
return empty
答案 2 :(得分:0)
使用列表理解:
n = 2
xs = [1, 2, 3, 4, 5, 6, 7]
>>> [x for i, x in enumerate(xs, 1) if not i % n]
[2, 4, 6]
xs = [2, 3, 4, 5, 6, 7]
>>> [x for i, x in enumerate(xs, 1) if not i % n]
[3, 5, 7]
n = 3
xs = [11, 13]
>>> [x for i, x in enumerate(xs, 1) if not i % n]
[]
这会产生一个整数列表而不是字符串。
如果您想从列表中获取每个第n项,则需要使用enumerate
(以值1开头)。 if xs[i] %n == 0
解决方案恰好起作用,因为列表是连续范围。试试xs = [3, 3, 3, 3]
,了解您的功能和其他解决方案会发生什么......
为了帮助理解正在发生的事情,这里有一个临时值表。
i x i % 2 not i % 2
== == ===== =========
1 3 1 False
2 3 0 True
3 3 1 False
4 3 0 True