【问题标题】:How to input negative numbers into a list如何将负数输入到列表中
【发布时间】:2018-11-10 19:53:23
【问题描述】:

我需要一些帮助,因为每当我输入一个负数时,列表都会将其解释为一个单独的元素,因此一旦进行排序,它会将所有负号放在开头。代码的最终目标是在不使用默认排序函数的情况下对 2 个合并列表进行排序。此外,如果有更好的方法来消除列表中的空格,我将不胜感激,因为目前我必须将列表转换为字符串并替换/去除空格导致的额外元素。

list1 = list(input())
list2 = list(input())
mergelist = list1 + list2

print(mergelist)


def bubble_sort(X):
    nums = list(X)
    for i in range(len(X)):
        for j in range(i+1, len(X)):
            if X[j] < X[i]:
                X[j], X[i] = X[i], X[j]
    return X

mergelist = bubble_sort(mergelist)
strmergelist = str(mergelist)

strmergelist = strmergelist.replace("'", '')
strmergelist = strmergelist.replace(",", '')
strmergelist = strmergelist.strip('[]')
strmergelist = strmergelist.strip()

print(strmergelist)

没有负数的列表的输出是:

1 2 3 4 4 5 5

但是,如果有否定,它会变成:

- - - - 1 2 3 3 4 4 5

当我输入任何负数时,我的第一个打印功能只是检查列表的合并看起来像这样(忽略空格,因为我稍后会尝试删除它们):

['1', ' ', '-', '2', ' ', '3', '3', ' ', '-', '4', ' ', '-', '4', ' ', '-', '5']

【问题讨论】:

  • 您应该以什么格式输入list1 和list2... 例如... 如果您输入-1 2 -3... 您可能想要拆分空格,然后在排序之前将每个单词转换为整数...这样您就不必删除东西/删除括号等...您希望使用 numbers 列表 - 而不是单个字符...
  • 所以我猜list1 = [int(n) for n in input().split()] 和list2 可能会在这里解决您的问题...
  • 那些是字符串。负数列表不是 [-1,-2] 吗?
  • 他从输入中获取数字,但我看不到他将输入转换为整数,因此即使变量的拆分是正确的,"-1" &lt; "-2" 也会是 True,因为它是查看字符的 ASCII 值。
  • 你为什么在名单上打电话给str?只需" ".join(mergelist)。

标签: python whitespace negative-number


【解决方案1】:

list() 不会将字符串解析为整数列表,它会将可迭代的项目转换为项目列表。 要从控制台读取列表,请尝试以下操作:

def read_list():
    """
    read a list of integers from stdin
    """
    return list(map(int, input().split()))

list1 = read_list()
list2 = read_list()

input.split() 读取一行用户输入并将其用空格分隔 - 基本上是单词。

int() 可以将字符串转换为整数。

map(int, ...) 返回一个可迭代对象,它将int() 应用于用户输入的每个“单词”。

对list() 的最终调用会将可迭代对象转换为列表。

这也应该处理负数。

此外,我看到您希望打印结果列表而不需要额外的字符。我推荐这个:

print(' '.join(mergelist))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多