复制列表中的数字

Duplicate a number within a list

我有以下代码:

def repeatNumbers(data):
    for number in data:
        return [number[0]] * number[1]
        

print(repeatNumbers([[1, 10]]))
print(repeatNumbers([[1, 2], [2, 3]]))
print(repeatNumbers([[10, 4], [34, 6], [92, 2]]))

我想用列表中第二个数字的值复制列表中的第一个数字。我只能得到以下内容:

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 1]
[10, 10, 10, 10]

同时输出必须是字符串,格式如下:

1111111111

11, 222

10101010, 343434343434, 9292
def repeatNumbers(data):
    output_strings = []
    for numbers in data:
        output_strings.append(str(numbers[0]) * numbers[1])
    return ", ".join(output_strings)
        

print(repeatNumbers([[1, 10]]))
print(repeatNumbers([[1, 2], [2, 3]]))
print(repeatNumbers([[10, 4], [34, 6], [92, 2]]))

打印

1111111111
11, 222
10101010, 343434343434, 9292

不返回,而是将中间值 (str(numbers[0]) * numbers[1]) 存储在列表中

您的问题是您在 for 循环中使用了 return。这告诉 Python 到 立即 return 你告诉它的值。一种更简洁的方法是将数据转换为 str 并使用 str.join() 方法:

def repeatNumbers(data):
    return ", ".join(str(a)*b for a, b in data)

输出:

>>> print(repeatNumbers([[1, 10]]))
1111111111
>>> print(repeatNumbers([[1, 2], [2, 3]]))
11, 222
>>> print(repeatNumbers([[10, 4], [34, 6], [92, 2]]))
10101010, 343434343434, 9292

表达式 (str(a)*b for a, b in data) 是 Python 中的生成器表达式。它允许干净、紧凑、惰性的迭代。

str.join() 方法采用可迭代的字符串序列,并使用用作 .join() 调用前缀的字符串文字将它们连接起来。换句话说,", ".join(seq) 将采用字符串序列 seq 并将它们与字符串 ", ".

连接起来