将split()的结果解压缩到比指定的更少的变量

时间:2018-01-12 17:11:20

标签: python python-3.x

我一直在做一些代码,我输入一些数字,将它们分成单独的变量,然后对这些数字进行排序,我可以将它们分开,但是当我尝试分成只有4时(例如)数字(小于变量的数量)它返回错误'没有足够的变量来解包'。我想要它所以我可以输入任意数量的数字(最大值,在这种情况下是10)并且它将对给定的数字进行排序,打印它们,但它不会打印其他变量。

我到目前为止做到了这一点:

a, b, c, d, e, f, g, h, i, j = input("enter up to 10 digits").split()
nlist=(a, b, c, d, e, f, g, h, i, j)
def bubbleSort():
    for l in range(len(nlist)-1,0,-1):
        for k in range(l):
            if nlist[k]>nlist[k+1]:
                temp = nlist[k]
                nlist[k] = nlist[k+1]
                nlist[k+1] = temp

bubbleSort(nlist)
print(nlist)

我知道这可能有很多错误,所以如果有人能帮我找到更有效/更正确的方法,我会非常感激。

另外,只是想知道,我怎么能这样做,所以一旦我输入数字,我就可以找到数字的均值,模式,中等和范围?

4 个答案:

答案 0 :(得分:4)

您似乎对使用拆分所需的内容感到困惑。在前两行中,您正在解压缩列表,然后立即重建列表:

text

如果你用n a, b, c, d, e, f, g, h, i, j = input("enter numbers").split() nlist=(a, b, c, d, e, f, g, h, i, j) # note you actually want [] not () 替换你的nlist(因为你正在改变列表),那么你的有效案例将等同于以下内容

[]

您根本不需要打开包装。但请注意,nlist = input("enter numbers").split() 仍然是nlist的序列,如果您想要str列表,则可以选择几个选项。

int

其他问题包括:

1)您正在定义bubbleSort以获取零参数,但随后用一个参数调用它。 nlist是一个全球性的并不是很好。您最好将代码划分为几个函数

# 1) list comprehension
nlist = [int(i) for i in input("enter numbers").split()]

# 2) map
nlist = map(int, input("enter numbers").split())

2)你不能分配元组的元素。元组是由def bubbleSort(nlist): ... def main(): nlist = # choose from the above options bubbleSort(nlist) print(nlist) if __name__ == '__main__': # only run if module is being run directly main() 包围的序列,与()的原始代码中的序列一样。这不会起作用

nlist

使用列表,而不是使用>>> items = (1, 2, 3) >>> items [0] = 4 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment

包围序列
[]

3)python中的多个赋值意味着你不必使用旧的交换习语。而不是像

这样的代码
>>> items = [1, 2, 3]
>>> items [0] = 4 # fine

你可以写

temp = a
a = b
b = temp

这种技术可以清理你在代码中移动元素的代码

答案 1 :(得分:0)

首先,您希望将输入作为列表

input_list = map(int, input("enter up to 10 numbers").split())

然后你要对它进行排序:

input_list.sort()

或者如果您想保留原始订单的版本:

sorted_list = sorted(input_list)

然后你可以打印出来:

print(sorted_list)

如果要将用户限制为10输入,请使用循环输入:

continue_ = True
while continue_:
    input_list = input("enter up too 10 numbers").split()
    continue_ = len(input_list) >= 10

最终代码是:

continue_ = True
while continue_:
    input_list = map(int, input("enter up too 10 numbers").split())
    continue_ = len(input_list) >= 10
sorted_list = sorted(input_list)
print(sorted_list)

答案 2 :(得分:0)

如果那是你的目标,而这不是你正在做的练习,那么就这样做:

alist[i] += alist[i-1]

答案 3 :(得分:0)

其他答案有很好的解释。我只是在展示一种方式。你想通过这种方式实现的目标是什么:

print(sorted(map(int,input().split())))

简短说明:

  • input获取以空格分隔的数字输入字符串
  • split()会将其拆分为数字字符串列表(仍为str
  • map(int, ...)会将这些字符串转换为int(现在它们是数字)
  • sorted会对数字进行排序
  • print将打印

以上是上述限制输入10个数字的精彩版本:

print('Enter 10 numbers. Press Enter after each number:')
print(sorted(int(f()) for f in [input]*10))