仅在列表的列表中搜索字符串时返回整数的平均值



我是Python的初学者。假设我有一个python列表的列表

list1 = [['id1','Jane','Doe',100,75,100],['id2','John','Snow',90,87,92],['id3','Peter','Pan',79,81,83]]

我如何搜索列表的列表,说'id2',并打印一个列表中只有整数的列表?

这是我尝试过的

import numbers
def list_search(lister,index):
for i in lister:
for j in i:
if j == index:
[x for x in i if isinstance(x, numbers.Number)]
print("Not found: ",index)

下面是我的函数

的测试
list_search(list1,'id2')

我很期待(90、87、92)但我得到了未找到:id2

此解决方案在找到index时停止循环。

如果没有找到index,则返回None

使用列表推导式轻松创建列表。

不需要导入Number,只需测试它是否为整数。

一个小的优化包括从第二行(item[:1])开始查找整数,因为我们知道第一行是索引。

如果假设第2行和第3行(Jane, Doe)总是字符串,您甚至可以在这里将1替换为3。

def list_search(lister, index):
for item in lister:
if item[0] == index:
return [x for x in item[1:] if isinstance(x, int)]
return None

这是为您提供整数的第一部分。计算给定列表的平均值是最简单的部分。

numbers = list_search(list1, "id2")
print(sum(numbers)/len(numbers))

这一行不做任何事情:

[x for x in i if isinstance(x, numbers.Number)]

你要么打印它,要么返回它。此外,你的函数将始终显示消息Not found,所以你的代码应该像这样:

import numbers
list1 = [['id1','Jane','Doe',100,75,100],['id2','John','Snow',90,87,92],['id3','Peter','Pan',79,81,83]]
def list_search(lister,index):
for i in lister:
for j in i:
if j == index:
return [x for x in i if isinstance(x, numbers.Number)]
print("Not found: ",index)

my_list = list_search(list1,'id2')
print(my_list)
# print average
print( sum(my_list) / len(my_list))

输出:

[90, 87, 92]
89.66666666666667

这是您可以编写的函数。首先查看所有的第一个元素,如果第一个元素等于你想要的,然后检查整数并将它们附加到结果列表中。最后返回结果列表。

def func(a, activatedString):
result = []
for i in a:
if i[0] == activatedString:
for j in i:
if isinstance(i, int):
result.append(j)
return result

但是如果你想要更短的方式,你可以这样做:

def func(list1, activatedString):
return [i for i in [a  for a in list1 if a[0] == activatedString][0]  if isinstance(i, int)]
print(func(list1, "id2"))

让我们从只获取integers列表开始:

list1 = [['id1','Jane','Doe',100,75,100],['id2','John','Snow',90,87,92],['id3','Peter','Pan',79,81,83]]
temp_integers = [list(filter(lambda x: isinstance(x, int), list1[i])) for i in range(len(list1))]

输出:

>>> temp_integers
... [[100, 75, 100], [90, 87, 92], [79, 81, 83]]

然后我们添加它们各自的means的列表:

temp_means=[np.mean(x) for x in temp_integers]

输出:

>>> temp_means
... [91.66666666666667, 89.66666666666667, 81.0]

然后打印相应的整数到id2和它们的mean:

for i in range(len(list1)):
if 'id2' in list1[i]:
print(temp_integers[i])
print(temp_means[i])

把它们放在一个函数中

def list_search(lister,index):
temp_integers = [list(filter(lambda x: isinstance(x, int), lister[i])) for i in range(len(lister))]
temp_means=[np.mean(x) for x in temp_integers]

if all(index not in y for y in lister):
print("Not found: ",index)
else:
for i in range(len(lister)):
if index in lister[i]:
print(temp_integers[i])
print(temp_means[i])

>>> list_search(list1,'id2')
... [90, 87, 92]
... 89.66666666666667

使用尝试除之外的方法

list1 = [['id1','Jane','Doe',100,75,100],['id2','John','Snow',90,87,92],['id3','Peter','Pan',79,81,83]]
def list_search(list_of_list,index):
result=[]
for lis in list_of_list:
if lis[0]==index:
for check in lis:
try:
result.append(int(check))
except ValueError:
continue
return sum(result)/len(result) if result else 0
print(list_search(list1,"id2"))

输出: -

207.6666666

您可以使用列表推导:

list1 = [['id1','Jane','Doe',100,75,100],['id2','John','Snow',90,87,92],['id3','Peter','Pan',79,81,83]]
def list_search(lister, index):
return [j for i in lister for j in i if isinstance(j, int) and i[0] == index]
results = list_search(list1,'id2')
print(results)
average = sum(results)/len(results)
print(average)
# Output:
# [90, 87, 92]
# 89.66666666666667

相关内容

  • 没有找到相关文章

最新更新