将python列表中的所有数字转换为1或0

Shi*_*ifu -5 python

我有一个整数列表,它看起来像这样:

[10, 8, 4, 4, 13, 1, 1, 1, 1, 6, 1, 2, 1, 1, 0, 1, 5, 1, 5, 5, 2, 1, 0, 0, 4]
Run Code Online (Sandbox Code Playgroud)

我需要这个列表,每0,它保持0和每个更高的数字为1.因此将上面的列表转换为:

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1]
Run Code Online (Sandbox Code Playgroud)

我试着使用以下代码:

for numbers in list:
   if number==0:
      number=0
   if number>1:
      number=1
Run Code Online (Sandbox Code Playgroud)

但这给了我:

 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
Run Code Online (Sandbox Code Playgroud)

Rom*_*kar 12

>>> l = [10, 8, 4, 4, 13, 1, 1, 1, 1, 6, 1, 2, 1, 1, 0, 1, 5, 1, 5, 5, 2, 1, 0, 0, 4]
>>> [1 if x > 0 else 0 for x in l]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1]
Run Code Online (Sandbox Code Playgroud)

如果要更改现有列表

for i, x in enumerate(l):
    if x >= 1: l[i] = 1
Run Code Online (Sandbox Code Playgroud)


Inb*_*ose 11

一个简单的列表理解

>>> l = [10, 8, 4, 4, 13, 1, 1, 1, 1, 6, 1, 2, 1, 1, 0, 1, 5, 1, 5, 5, 2, 1, 0, 0, 4]
>>> [1 if i else 0 for i in l]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1]
Run Code Online (Sandbox Code Playgroud)

您的代码无法正常工作的原因是您正在遍历(循环)列表中的每个项目,但不修改原始列表中的项目,只修改返回的项目.


计时器(按速度顺序):

# my method: [1 if i else 0 for i in l]
>>> timeit.Timer('[1 if i else 0 for i in l]', setup='from __main__ import l').repeat()
[1.4960370266417915, 1.457976119063474, 1.457053021255831]
# Roman Pekar: [1 if x > 0 else 0 for x in l]
>>> timeit.Timer('[1 if x > 0 else 0 for x in l]', setup='from __main__ import l').repeat()
[1.5296303022631434, 1.5041486202146075, 1.51295106957906]
# inspectorG4dget: [int(i>0) for i in myList]
>>> timeit.Timer('[int(i>0) for i in l]', setup='from __main__ import l').repeat()
[5.0810576000558285, 4.865218180917736, 4.7859557786252935]
# Haidro: map(int, map(bool, l))
>>> timeit.Timer('map(int, map(bool, l))', setup='from __main__ import l').repeat()
[5.725813168085608, 5.759308116913473, 5.549817013103507]
# alecxe: map(lambda x: int(x > 0), l)
>>> timeit.Timer('map(lambda x: int(x > 0), l)', setup='from __main__ import l').repeat()
[7.054628605392196, 7.291914272244128, 7.223923128993391]
# inspectorG4dget: [int(bool(i)) for i in l]
>>> timeit.Timer('[int(bool(i)) for i in l]', setup='from __main__ import l').repeat()
[8.60473766374804, 8.537255398342722, 8.545150893104449]
Run Code Online (Sandbox Code Playgroud)


ins*_*get 8

myList = [10, 8, 4, 4, 13, 1, 1, 1, 1, 6, 1, 2, 1, 1, 0, 1, 5, 1, 5, 5, 2, 1, 0, 0, 4]
newList = [int(i>0) for i in myList]
Run Code Online (Sandbox Code Playgroud)

要么

newList = [int(bool(i)) for i in myList]
Run Code Online (Sandbox Code Playgroud)