发布
社区首页 >问答首页 >使用for循环引用列表中的每一项(而不仅仅是最后一项)

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

Stack Overflow用户
提问于 2015-11-20 00:10:02
回答 4查看 267关注 0票数 1

我不知道如何引用列表中的每一项,而不是在使用for循环时只引用最后一项。下面是一个简单的程序,我想要在一行中打印一个n-*,其中n是stars列表中的每个数字。

代码语言:javascript
代码运行次数:0
复制
#!/usr/bin/python

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

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

    return char

print histogram()

此代码的输出仅为*** (stars中的最后一个数字)。我怎样才能让它打印出每个数字的星号?请尽可能使用最简单的语法和解释。

EN

回答 4

Stack Overflow用户

发布于 2015-11-20 00:16:52

实际上,您的函数只返回分配给'char‘的最后一个值--这个值将是由星号组成的单个字符串。您想要做的是,创建一个“char”在每次循环迭代时获取的连续值的列表:

代码语言:javascript
代码运行次数:0
复制
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‘。

做同样事情的一种更快、更干净的方法是列表理解(一种functional programming结构),它可以动态创建列表:

代码语言:javascript
代码运行次数:0
复制
def histogram():
    stars = [10,2,3]
    return [ "*" * i  for i in stars ]

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

>>> print('\n'.join( histogram() ))
**********
**
***
票数 4
EN

Stack Overflow用户

发布于 2015-11-20 00:16:54

问题是,对于stars中的每一项,您都需要重新分配char。因此,在histogram()返回时,char等于"*" * stars[-1] (列表中的最后一项)。纠正这个问题的最简单方法是只为stars中的每个元素打印char,而不返回任何内容。

代码语言:javascript
代码运行次数:0
复制
def histogram():
    stars = [10,2,3]
    for i in stars:
        char = "*" * i
        print char

histogram()

**********

**

***

如果您希望返回直方图的输出,则可以添加到char,而不是将其赋给新值。'\n'将在stars中的每一项之间添加一个新行(如果没有它,所有的星号将在输出中的一行上)。

代码语言:javascript
代码运行次数:0
复制
def histogram():
    stars = [10,2,3]
    char = ''
    for i in stars:
        char += "*" * i + '\n'
    return char

print histogram()

一种更简洁的方式来写上面的代码:

代码语言:javascript
代码运行次数:0
复制
def histogram():
    stars = [10,2,3]
    return '\n'.join('*' * i for i in stars)

print histogram()
票数 2
EN

Stack Overflow用户

发布于 2015-11-20 00:20:15

考虑一下:

代码语言:javascript
代码运行次数:0
复制
def histogram(li):
    rtr=[]
    for n in li:
        rtr.append('*'*n)

    return rtr

然后,您可以执行以下操作:

代码语言:javascript
代码运行次数:0
复制
stars=[10,2,3]
for t in zip(stars, histogram(stars)):
    print('{:4d} {}'.format(*t))

打印:

代码语言:javascript
代码运行次数:0
复制
  10 **********
   2 **
   3 ***
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33808916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档