>>> import numpy as np
>>> def mapfeature_binominal_array(x1, x2, n=6, lst=None):
... if lst is None:
... lst = [x1, x2]
... if n == 1:
... return np.array(lst)
... else:
... for i in range(n + 1):
... formula = (x1 ** (n - i)) * (x2 ** i)
... lst.append(formula)
... return mapfeature_binominal_array(x1, x2, n - 1, lst)
...
>>> mapfeature_binominal_array(-0.25, 1.5)
array([ -2.50000000e-01, 1.50000000e+00, 2.44140625e-04,
-1.46484375e-03, 8.78906250e-03, -5.27343750e-02,
3.16406250e-01, -1.89843750e+00, 1.13906250e+01,
-9.76562500e-04, 5.85937500e-03, -3.51562500e-02,
2.10937500e-01, -1.26562500e+00, 7.59375000e+00,
3.90625000e-03, -2.34375000e-02, 1.40625000e-01,
-8.43750000e-01, 5.06250000e+00, -1.56250000e-02,
9.37500000e-02, -5.62500000e-01, 3.37500000e+00,
6.25000000e-02, -3.75000000e-01, 2.25000000e+00])
这个函数应该按工资来排序名单。 我设法隔离了姓氏和工资,但我似乎无法根据他们的工资进行排序
'东西'又名employee_data
def salary_sort(thing):
def importantparts(thing):
for i in range(1, len(thing)):
a=thing[i].split(':')
output = (a[1],a[0],a[8])
sortedlist = sorted(output, key = lambda item: item[2], reverse=True)
print(sortedlist)
return importantparts(thing)
salary_sort(employee_data)
输出
employee_data = ["FName LName Tel Address City State Zip Birthdate Salary",
"Arthur:Putie:923-835-8745:23 Wimp Lane:Kensington:DL:38758:8/31/1969:126000",
"Barbara:Kertz:385-573-8326:832 Ponce Drive:Gary:IN:83756:12/1/1946:268500",
"Betty:Boop:245-836-8357:635 Cutesy Lane:Hollywood:CA:91464:6/23/1923:14500",.... etc.]
答案 0 :(得分:2)
您的代码存在许多问题,但关键是您在创建每行时对其进行排序,而不是列表列表。
此外:
importantparts()
不返回任何内容(因此salarysort()
返回None)。
您需要将Salary
字段转换为int
,以便按值正确排序(它们并非都具有相同的字段宽度,因此将使用字母数字排序不正确的)。
最后,您不需要使用for i in range(1, len(thing)):
,您可以直接在thing
上进行迭代,并使用slice删除第一个元素 1 。
1 请注意,这最后不是错误本身,但直接在迭代上迭代被认为更“Pythonic”。
def salary_sort(thing):
def importantparts(thing):
unsortedlist = []
for item in thing[1:]:
a=item.split(':')
unsortedlist.append([a[1],a[0],int(a[8])])
print unsortedlist
sortedlist = sorted(unsortedlist, key = lambda item: item[2], reverse=True)
return (sortedlist)
return importantparts(thing)
employee_data = ["FName LName Tel Address City State Zip Birthdate Salary",
"Arthur:Putie:923-835-8745:23 Wimp Lane:Kensington:DL:38758:8/31/1969:126000",
"Barbara:Kertz:385-573-8326:832 Ponce Drive:Gary:IN:83756:12/1/1946:268500",
"Betty:Boop:245-836-8357:635 Cutesy Lane:Hollywood:CA:91464:6/23/1923:14500"]
print salary_sort(employee_data)
输出:
[['Kertz', 'Barbara', 268500], ['Putie', 'Arthur', 126000], ['Boop', 'Betty', 14500]]
答案 1 :(得分:1)
您的主要问题是您使用每个新的行重置output
序列,而不是先累积数据然后排序。另一个问题是你的外部函数声明了一个内部函数并调用它,但内部函数没有返回任何东西。最后,如果您对字符串进行排序而不将它们转换为整数,您将得到一个字母数字排序:(' 9',' 81',' 711',&#39 ; 6')这可能不是你所期望的。
顺便说一句,外部内部函数模式在这里没用,你可以使用一个简单的直接函数。
def salary_sort(thing):
output = []
for i in range(1, len(thing)):
a=thing[i].split(':')
output.append([a[1],a[0],a[8]])
sortedlist = sorted(output, key = lambda item: int(item[2]), reverse=True)
return sortedlist
结果如预期:
[['Kertz', 'Barbara', '268500'], ['Putie', 'Arthur', '126000'], ['Boop', 'Betty', '14500']]
如果您更喜欢薪水的数字,那么您可以将转换率提高一步:
def salary_sort(thing):
output = []
for i in range(1, len(thing)):
a=thing[i].split(':')
output.append([a[1],a[0],int(a[8])])
sortedlist = sorted(output, key = lambda item: item[2], reverse=True)
return sortedlist
,结果再次正确:
[['Kertz', 'Barbara', 268500], ['Putie', 'Arthur', 126000], ['Boop', 'Betty', 14500]]
答案 2 :(得分:0)
问题在于,您根据工资值对个人元素(意为['Putie', 'Arthur', '126000']
)进行排序,而不是整个数组。
此外,由于您要对工资进行排序,您必须将它们转换为int
,否则将使用按字母顺序排序。
您可以查看以下内容:
def salary_sort(thing):
def importantparts(thing):
data = []
for i in range(1, len(thing)):
a=thing[i].split(':')
output = (a[1],a[0],int(a[8]))
data.append(output)
data.sort(key=lambda item: item[2], reverse=True)
return data
return importantparts(thing)
employee_data = ["FName LName Tel Address City State Zip Birthdate Salary", \
"Arthur:Putie:923-835-8745:23 Wimp Lane:Kensington:DL:38758:8/31/1969:126000", \
"Barbara:Kertz:385-573-8326:832 Ponce Drive:Gary:IN:83756:12/1/1946:268500", \
"Betty:Boop:245-836-8357:635 Cutesy Lane:Hollywood:CA:91464:6/23/1923:14500"]
print(salary_sort(employee_data))
正如预期的那样:
[('Kertz', 'Barbara', 268500), ('Putie', 'Arthur', 126000), ('Boop', 'Betty', 14500)]
我所做的是将员工的所有相关数据推送到一个新数组(名为data
),然后使用lambda
函数对该数组进行排序。