【问题标题】:I am 'losing' values when I use the zip() function in Python 3 [duplicate]当我在 Python 3 中使用 zip() 函数时,我正在“丢失”值 [重复]
【发布时间】:2017-07-06 22:31:11
【问题描述】:

当我运行以下代码时,我似乎“丢失”了值,但我不确定为什么。有没有其他方法可以打印出相邻的两个列表?

我想做的是根据用户输入在long 中创建一个整数列表。然后它应该按升序将它们分成正值和负值。

原代码为:

import numpy as np
import random
print( "(This will create a list of integers, UserInput long. Then separate"     
 "\nthem into positive and negative values in ascending order.)")

userI = input("\nHow many integers would you like, between the values of -100 and 100?: ")

userI = int(userI)

Ints = []

for A in range(userI):
    Ints.append(random.randint(-100, 100))

print('\n', len(Ints))

def quad(N):
    Ints_pos = []
    Ints_neg = []
    for B in N:
        if B >= 0:
            Ints_pos.append(B)
        else:
            Ints_neg.append(B)

    return (Ints_pos, Ints_neg)

pos, neg = quad(N = Ints)

pos = sorted(pos)
neg = sorted(neg, reverse=True)

print('\nPositive', '             Negative'
  '\nValues:',  '              Values:')


for C, D in zip(pos, neg):
    print('-> ', C, '               -> ', D)

input("\nPress 'Enter' to exit")

【问题讨论】:

  • 你的意思是

标签: python list sorting printing python-3.6


【解决方案1】:

请记住,使用zip时:

当最短的输入迭代用完时,迭代器停止。

您应该考虑使用itertools.zip_longest 并提供一个虚拟值来填充较短的可迭代对象。

【讨论】:

  • 试过这样做,我没有添加一个虚拟值,因为这违背了代码的目的。
  • @VincentGood 我不确定我理解你所说的破坏代码的目的是什么意思。
  • 代码的目的是打印两个列表,一个带有负值,另一个带有正值。这些列表中值的数量由用户输入决定。如果我提供一个虚拟值,我将添加到用户决定的值的数量中。
  • 听起来很合理,但没有任何方法可以并排打印两个长度不匹配的列表,而不会从较长的列表中丢失。例如,虚拟值可以是一个字母,因此您会知道这些不是用户值的一部分
  • 谢谢,我会的。考虑到您不能并排打印两个长度不匹配的列表,这是迄今为止我遇到的最佳答案。
猜你喜欢
  • 2018-10-22
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
相关资源
最近更新 更多