使用for循环引用列表中的每个项(而不仅仅是最后一个项)

1 投票
4 回答
832 浏览
提问于 2025-05-10 15:46

我不太明白在使用循环的时候,怎么能引用列表中的每一个项目,而不仅仅是最后一个项目。这里有一个简单的程序,我想在一行上打印出 n 个*,其中 n 是stars列表中的每一个数字。我的代码如下:

#!/usr/bin/python

def histogram():
    stars = [10,2,3]

    for i in stars:
        char = "*" * i

    return char

print histogram()

这段代码的输出结果只有***(也就是stars中的最后一个数字)。我该怎么做才能让它打印出每个数字对应的星号呢?请用最简单的语法和解释来说明。

相关文章:

  • 暂无相关问题
暂无标签

4 个回答

-1
#!/usr/bin/python

def histogram():

    stars = [10,2,3]
    stars_str = ""
    for i in stars  :
        stars_str += "*" * i + '\n'

    return stars_str.strip()


print histogram ()

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

1

考虑一下:

def histogram(li):
    rtr=[]
    for n in li:
        rtr.append('*'*n)

    return rtr

然后你可以这样做:

stars=[10,2,3]
for t in zip(stars, histogram(stars)):
    print('{:4d} {}'.format(*t))

输出:

  10 **********
   2 **
   3 ***
2

问题在于,对于stars中的每一个项目,你都在重新赋值给char。所以,当histogram()返回时,char的值就变成了"*" * stars[-1](也就是列表中的最后一个项目)。解决这个问题最简单的方法就是直接打印每个stars中的char,而不是返回任何东西。

def histogram():
    stars = [10,2,3]
    for i in stars:
        char = "*" * i
        print char

histogram()

**********
**
***

如果你想从histogram返回输出,可以选择在char上添加内容,而不是给它重新赋值。为此,我们可以在循环外把char设置为空字符串(''),然后在循环内部使用char +=(这相当于char = char +)来给char添加内容。'\n'是用来在stars中的每个项目之间添加换行的(如果没有这个,所有的星星会在输出中显示在同一行)。

def histogram():
    stars = [10,2,3]
    char = ''
    for i in stars:
        char += "*" * i + '\n'
    return char

print histogram()

以上内容可以更简洁地写成:

def histogram():
    stars = [10,2,3]
    return '\n'.join('*' * i for i in stars)

print histogram()
4

现在你的函数只返回了最后一次赋值给'char'的值,这个值是一个由星号组成的字符串。你想要做的是在每次循环中,记录'char'的每一个值,形成一个列表。

def histogram():
    stars = [10,2,3]
    characters = []

    for i in stars  :
        cur_stars = "*" * i 
        characters.append( cur_stars )
        print cur_stars

    return characters

>>> stars = histogram()
**********
**
***

这样做会逐行打印出星号,并把这些星号存储在一个叫'stars'的变量里。

还有一种更快、更简洁的方法可以做到这一点,那就是使用列表推导式(这是一种函数式编程的结构),它可以即时创建你的列表:

def histogram():
    stars = [10,2,3]
    return [ "*" * i  for i in stars ]

>>> histogram()
['**********', '**', '***']

>>> print('\n'.join( histogram() ))
**********
**
***

撰写回答