如何将输出设置为没有空格的列表?

时间:2016-02-27 18:46:41

标签: python list

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]

输出会变成'[]',空集吗?

3 个答案:

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