【问题标题】:Basic Python looping and appending基本的 Python 循环和追加
【发布时间】:2017-07-07 13:56:09
【问题描述】:

编写一个程序,该程序接受一个列表并根据该元素的数据类型为列表中的每个元素打印一条消息。

您的程序输入将始终是一个列表。对于列表中的每个项目,测试其数据类型。如果该项目是一个字符串,则将其连接到一个新字符串上。如果是数字,请将其添加到运行总和中。在程序结束时打印字符串、数字和对数组包含的内容的分析。如果它只包含一种类型,则打印该类型,否则,打印 'mixed'。

所以以上是我想要完成的。而且我对这一切都非常陌生,如果我有时说不通,我很抱歉。现在我只是试图设置遍历我的列表并将任何 str 附加到字符串列表,并将任何 int 附加到我的 num 列表。我尝试了很多方法并阅读了文档,并试图寻求帮助,但我要么误读了东西,要么只是搜索了错误的东西。任何帮助将不胜感激。

stuff = ['magical unicorns',19,'hello',98.98,'world']

string = []
num = []

for i in range(len(stuff)):
    if isinstance(i,str):
        string.append(value,i)
    if isinstance(i,int):
        num.append(i)

print (string)
print (num)

【问题讨论】:

  • 在线string.append(value,i)value 应该是什么?它看起来没有在其他任何地方定义。
  • 您至少知道您最初的stuff 列表的预期输出是什么吗?如果你这样做了,那么你应该很容易朝着结果努力。如果你不这样做,你应该再读一遍作业,直到你读完为止。
  • 值未定义,您是正确的。我只是在尝试不同的选择来尝试让某些东西发挥作用
  • 是的,你需要 stuff[i] 来获取位置 i 的 stuff 成员。这适用于您在 For 循环中使用 'i' 的所有地方。事实上,解决这个问题,您就快到了。

标签: python


【解决方案1】:

您可以使用列表推导获得快速、简洁的解决方案:

stuff = ['magical unicorns',19,'hello',98.98,'world']

s = ''.join(i for i in stuff if isinstance(i, str))

a = sum(i for i in stuff if isinstance(i, int) or isinstance(i, float))

print(s)

print(a)

if len(s) > 0 and a > 0:
   print("mixed")

elif len(s) > 0 and a == 0:
   print("string")

elif len(s) == 0 and a > 0:
   print("integer")

输出:

magical unicornshelloworld
19
mixed

【讨论】:

  • "你输入的数组是混合类型" "字符串:magic unicorns hello world" "总和:117.98"
  • 这就是我的最终输出
  • @Ajax1234- 这是正确的,除了 num 将是 19 和 98.98 的总和。 Warmley 针对上述问题发布了解决方案。
  • @RobertAmato 现已修复。
  • 非常有用的东西。完美解决了问题!
【解决方案2】:
for i in range(len(stuff))

这将遍历列表的索引。因此,您只会将此索引附加到您的列表num

执行相同的循环,但将 for i in range(len(stuff)) 替换为 for i in stuff。这样,您将遍历列表元素

【讨论】:

    【解决方案3】:
    stuff = ['magical unicorns',19,'hello',98.98,'world']
    
    string = []
    num = []
    
    for i in stuff:
        if isinstance(i,str):
           string.append(i)
        if isinstance(i,int):
           num.append(i)
    
    print (string)
    print (num)
    

    【讨论】:

    • 这只是问题中代码的复制和粘贴——这怎么可能是答案?
    • @mpf82 : 我想这不是复制和粘贴 .. for i in stuff 和 for i in len(stuff) 不同
    • 抱歉,不是复制粘贴,但仍然不正确(例如,未定义的value 仍然存在)并且不会打印出所需的值。
    • 他尝试将 loopappend 字符串 + 数字转换为数组。我帮他解决了这个问题。编辑:取出值错误
    【解决方案4】:

    将 python 的 for 循环视为其他语言中的 foreach 循环。所以我们要遍历 stuff 列表中的每个项目。 然后我们想要对字符串和数字进行运行总计。 这是一个完成此任务的简单循环:)

    from numbers import Number
    stuff = ['magical unicorns',19,'hello',98.98,'world']
    
    running_string = ''
    running_total = 0
    
    for item in stuff:
        if isinstance(item, basestring):
            running_string += item
        if isinstance(item, Number):
            running_total += item
    
    print running_total
    print running_string
    if running_string and running_total:
        print 'mixed'
    elif running_string:
        print 'string'
    elif running_total:
        print 'int'
    else:
        print 'empty'
    

    【讨论】:

    【解决方案5】:

    这应该可以解决问题。

    stuff = ['magical unicorns',19,'hello',98.98,'world']
    
    s = ""
    num = 0
    hasnum = False
    hasstr = False
    
    for i in stuff:
        if isinstance(i, str):
            s += i
            hasstr = True
        if isinstance(i, int):
            num += i
            hasnum = True
    
    print (string)
    print (num)
    if hasnum and not hasstr:
        print "Only ints"
    elif hasstr:
        print "Only strs"
    else:
         print "Mixed"
    

    【讨论】:

    • 您使用type而不是isinstance的任何特殊原因?
    • 我只是更喜欢它的外观
    • 但是Python Style Guide 说“对象类型比较应该始终使用 isinstance() 而不是直接比较类型。”
    • 最快的方法是使用过滤功能hasnum = filter(lambda x:type(x)==int,stuff) hasstr = filter(lambda x:type(x)==str,stuff)
    • @Marco-有道理,我还没用过lambda,我研究一下。
    猜你喜欢
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 2014-05-08
    • 2020-10-10
    • 2017-08-24
    • 1970-01-01
    • 2023-01-25
    • 2014-11-19
    相关资源
    最近更新 更多