到目前为止,这是我的代码
def filter_list2(elements):
for a in elements:
if a == (int(a) or float(a)) and a >= 1 and a < 50:
elements.append(a)
else:
elements.pop(a)
return elements
我要更改以下列表:
filter_list2([0,10,55])
对此:
[10]
我知道流行音乐超出了范围。我缺少什么吗?如何将清单转换成结果。流行是错误的做法吗?
编辑:
def filter_list2(elements):
for a in elements:
if a == (int(a) or float(a)) and a >= 1 and a < 50:
continue
else:
elements.remove(a)
return elements
不适用于“ abc”。 我该如何解决?
答案 0 :(得分:1)
list = [0, 10, 50]
new_list = [item for item in list if isinstance(item, (int, float)) and 50 > item >= 1]
列出对胜利的理解...
单行执行时不需要功能
更新后的问题的答案,而无需转换列表中的项目:
def filter_list(my_list):
new_list = []
for item in my_list:
try:
int(item)
except ValueError:
try:
float(item)
except ValueError:
continue
else:
if 50 > float(item) >= 1:
new_list.append(item)
else:
continue
else:
if 50 > int(item) >= 1:
new_list.append(item)
else:
continue
return new_list
my_list = [0, 10, 50, 'abc', '20', '13.3333']
print(filter_list(my_list))
丑陋但实用
答案 1 :(得分:0)
pop()
删除列表中索引处存在的元素,而不是元素本身。这意味着它接受索引号,而不是元素
答案 2 :(得分:0)
您将要使用remove
从列表中删除特定项目。我不确定您要如何使用a == (int(a) or float(a))
进行直接翻译,您可以使用:
def filter_list2(elements):
for a in elements:
if 1 <= a < 50:
continue
else:
elements.remove(a)
return elements
但这不是很有效,因为remove方法是线性的,因此此滤波器是二次的。相反,您可以按索引删除:
def filter_list2(elements):
for n, a in enumerate(elements):
if not(1 <= a < 50):
del elements[n]
return elements
如果要过滤掉所有字符串,可以执行以下操作:
def filter_list2(elements):
for n, a in enumerate(elements):
if not(1 <= a < 50) or not(isinstance(a, (int, float))):
del elements[n]
return elements
答案 3 :(得分:0)
您不想使用在编辑列表边界时使用的东西。
我的意思是
for i in myList :
myList.pop(anything)
恕我直言,这是个坏主意,因为i
在循环开始之前将list
的所有值都作为,这可能会导致某些问题(超出范围)。>
您可能更喜欢
tempList = []
for i in range(0,len(myList)) :
if myList[i] == ... :
tempList.append(i)
for i in tempList :
myList.pop(i)
话虽如此,据我所知,您想过滤掉“事物”列表中的任何字符串(其中可能包含诸如"abc"
之类的字符串,以及格式化为诸如"123"
或{ {1}}。)
然后应使用类似
的命令检查输入是否为浮点/整数"-1.2"
所以...就您而言,我愿意
try :
float(in)
except ValueError :
#Not a float nor int