【问题标题】:Printing list of strings打印字符串列表
【发布时间】:2021-11-13 09:23:26
【问题描述】:

我对 python 完全陌生,正在尝试打印列表中的一些元素。在第二个 print() 中,我收到错误消息,即:“列表索引必须是整数或切片,而不是 str”。 输出应该是数字总和运算执行 1+4。我哪里错了?

def sum_of_digits(s):
  letters = []
  numbers = []

  for i in s:
    if i.isalpha():
     letters.append(i)
    elif i.isdigit():
      numbers.append(i)
  print("The extracted non-digits are: {} ". format(letters), end="\n")    
  print("The sum of digits operation performs ", s.join(int(i, numbers[i])))

sum_of_digits("1aw4") 

【问题讨论】:

  • s.join(numbers)。你不需要i
  • 有了这个我得到:数字运算的总和执行 11aw44
  • 加入时为什么要使用s作为分隔符?使用"".join(numbers) 连接它们,它们之间没有分隔符。
  • 您可以提供预期的输出请edit并添加它
  • @Barmar 现在的样子: 1 数字总和运算执行 4

标签: python list printing


【解决方案1】:

我们来看看s.join(int(i, numbers[i]))

  • int(a,b) 表示将a 转换为int 与基b,例如

    int('11011', 2)  # 27
    int('11011', 8)  # 4617
    int('11011', 10) # 11011
    

    在你的情况下i 是字符串的最后一个字符,即使numbers[i] 也是不可能的(这就是异常所在)

  • s.join 意味着将原始的s 字符串放在给定参数的每个值之间,也没有意义


您可以将每个数字字符转换为 int,然后使用 sum

求和结果

def sum_of_digits(s):
    letters = []
    numbers = []
    for i in s:
        if i.isalpha():
            letters.append(i)
        elif i.isdigit():
            numbers.append(int(i))
    print("The extracted non-digits are: {} ".format(letters), end="\n")
    print("The sum of digits operation performs ", sum(numbers))

The extracted non-digits are: ['a', 'w']
The sum of digits operation performs  5

求和运算

def sum_of_digits(s):
    letters = []
    numbers = []
    for i in s:
        if i.isalpha():
            letters.append(i)
        elif i.isdigit():
            numbers.append(i)
    print("The extracted non-digits are: {} ".format(letters), end="\n")
    print("The sum of digits operation performs ", "+".join(numbers))


The extracted non-digits are: ['a', 'w']
The sum of digits operation performs  1+4

【讨论】:

  • 谢谢,但我希望输出为例如参数 ("1aw3)、"数字总和运算执行 1+ 3
  • @user17402153 查看我的编辑并告诉我最后一件事
【解决方案2】:

numbers[i] 会导致该错误,因为i 是一个字符串(它是for i in s: 循环中的最后一个字符)。由于numbers 是一个列表,因此索引必须是整数,而不是字符串。

join 的参数应该只是您要加入的字符串列表。无需拨打int(),也无需使用i

join() 方法应该在你想成为每个元素之间的分隔符的字符串上调用。如果您只想连接所有元素,请使用空字符串,而不是 s

print("The sum of digits operation performs ", "".join(numbers))

打印出来:

The sum of digits operation performs  14

DEMO

【讨论】:

  • 不适合我...我可以看看你的代码吗?
  • 我得到这个:序列项 0:预期的 str 实例,找到 int
  • 您的代码中没有任何内容可以将字符串转换为整数,因此不应该发生这种情况。
  • 如果您在循环中执行numbers.append(int(i)),就会发生这种情况。
  • 我添加了一个演示链接,显示我的代码可以正常工作。
猜你喜欢
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
  • 1970-01-01
  • 2015-01-30
相关资源
最近更新 更多