检查整数列表中的元素是否为正值或负值

2024-04-25 06:12:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个预先创建的整数列表,如果值满足条件,我希望遍历并附加“正”或“负”整数。但是,它在if语句的第一行的'str'和'int'实例之间抛出了“TypeError:”>;“。我以前在获取用户输入时看到过此错误,必须将输入转换为int,但我的列表已经是整数,因此我对需要修复的内容感到困惑。它在if lst[i] > 0:上抛出了错误

lst = [-2, 1, -2, 7, -8, -5, 0, 5, 10, -6, 7]

for i in lst:
    if lst[i] > 0:
        lst.append("positive")
    elif lst[i] < 0:
        lst.append("negative")
    else:
        lst.append("zero")

Tags: 实例用户gt内容列表forif错误
2条回答

溶液

[('negative', 'zero', 'positive')[((n > 0) - (n < 0)) + 1] for n in lst]

说明

联机代码使用列表理解创建列表

  1. ('negative', 'zero', 'positive')是从中提取字符串的字符串元组

  2. [((n > 0) - (n < 0)) + 1]获取字符串。让我们分解这个:

    子表达式(se)(n > 0) - (n < 0)给出了n的符号(-1如果n<;0,0如果n==0,+1如果n>;0) 注意:Python没有sign函数

    # Keep in mind that True = 1 and False = 0
    if n < 0  'se' evaluates to False - True  => 0 - 1 => -1
    if n > 0  'se' evaluates to True  - False => 1 - 0 =>  1
    if n == 0 'se' evaluates to False - False => 0 - 0 =>  0
    
  3. 然后,如果n<;0,如果n=0,则为1,如果n>;则为2;0.

  4. 最后,我们使用这个整数作为字符串元组中的索引

等效代码为:

strings=('negative', 'zero', 'positive')

def sign(n):
    """Returns the sign of n: -1 if n < 0, 0 if n == 0, +1 if n > 0"""
    return (n > 0) - (n < 0)
    
rtn = [] # will get the result
for n in lst:
    index = sign(n) + 1
    string = strings[index]
    rtn.append(string)

你应该这样做:

lst = ["positive" if el > 0 else "negative" if el < 0 else "zero" for el in [-2, 1, -2, 7, -8, -5, 0, 5, 10, -6, 7]]

以更快、更干净的方式创建所需内容

返回:

['negative', 'positive', 'negative', 'positive', 'negative', 'negative', 'zero', 'positive', 'positive', 'negative', 'positive'] 

相关问题 更多 >