【问题标题】:Print Number N times from array with Python用Python从数组中打印N次
【发布时间】:2015-12-18 17:43:09
【问题描述】:

我见过几个多次打印字符串的示例,但找不到多次打印 int 的解决方案。

我有两个数组。

我想打印 1, 1 次 3,2 次和 4, 2 次。 我知道我不能像打印字符串 n 次那样使用 * 运算符

我怎么去

[1,3,3,4,4]

我写的代码如下:

A = [1, 3, 4]
B = [1, 2, 2]
i = 0
j = 0
for i in range(0, len(A), 1):
    for j in range(0, len(B), 1):
        if i==j:
            print A[i] * B[j]

更新:我编辑了代码以反映实际数字,因为我测试了一个代码并发布了另一个代码。对此感到抱歉。

【问题讨论】:

  • 这不是你实际运行的代码;如果是的话,你会得到this output。我们需要查看您实际运行的代码,而不是在不同方面同样错误的代码。
  • 你想打印一个重复的数字列表,还是想建立一个每个数字出现频率的列表?您可以编辑问题以显示所需的输出吗?
  • user2357112 你说得对,我测试了一段代码并发布了另一段。对此感到抱歉。

标签: python arrays printing int


【解决方案1】:

列表推导的另一种选择

[e for e,c in zip(a,b) for i in range(c)]
[1, 3, 3, 4, 4]

或者,更hacky

sum([[e]*c for e,c in zip(a,b)],[])
[1, 3, 3, 4, 4]

【讨论】:

  • 我喜欢你的第一个解决方案。
【解决方案2】:

您可以使用列表推导扩展一个空列表。将您的两个列表 AB 压缩在一起,以并行处理它们。

result = []
_ = [result.extend([a] * b) for a, b in zip(A, B)]

>>> result
[1, 3, 3, 4, 4]

编辑

列表推导应该只用于创建列表,而不是它的副作用。最好在上面的示例中使用循环。

result = []
for a, b in zip(A, B):
    result.extend([a] * b)

【讨论】:

    【解决方案3】:

    您的代码中有很多您不需要的额外内容。

    A=[1,3,4]
    B=[1,2,2]
    """first loop over the elements you want to print in A"""
    for i in range(len(A)):
        """ A[i] j times """
        for j in range(B[i]):
            print A[i]
    

    我建议阅读一下范围函数在 python 中的工作原理https://docs.python.org/2/library/functions.html#range

    如果您想将这些值添加到数组中,您必须先定义该数组,然后将它们添加到其中而不是打印它们。

    A=[1,3,4]
    B=[1,2,2]
    result=[]
    """first loop over the elements you want to print in A"""
    for i in range(len(A)):
        """ append A[i] to result j times """
        for j in range(B[i]):
            result.append(A[i])
    
    print str(result)
    

    【讨论】:

    • 我明白了,谢谢!是的,这给出了我想要的,但我想最终打印 A[i] 以获得 1,3,3,4,4 所以我只是将其编辑为:for j in range(B[i]): print A[i ]
    猜你喜欢
    • 2012-05-05
    • 2021-02-28
    • 1970-01-01
    • 2019-09-29
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多