我试着在这里发现错误:
for list in result:
print(sorted(list, key=operator.itemgetter(1), reverse=True)[0])
考虑到list = [['cat1',0.0],['cat2',0.487],['cat3',0.89] ...]
当我运行代码时出现此错误:
TypeError: 'float' object is not subscriptable
任何帮助?
答案 0 :(得分:0)
在我看来,你试图对你的2d列表进行排序,而不是找到最大值。假设您可以使用lambda使用key
关键字按每个子列表的第一个元素对您的2d列表进行排序:
>>> result = [['cat1', 0.0],['cat2', 0.487],['cat3', 0.89]]
>>> sorted(result, key=lambda sublist: sublist[1], reverse=True)[0]
['cat3', 0.89]
>>>
答案 1 :(得分:0)
您可以将带有键功能的排序应用到外部列表中,但是您将其应用于每个内部列表:
itemgetter(1)
这会将itemgetter(1)(0.0)
应用于列表中的每个元素,因此0.0[1]
将失败并引发您看到的错误,因为它与print(sorted(result, key=operator.itemgetter(1), reverse=True)[0])
相同。
键功能应用于列表元素,所述调用的结果用于与其他元素进行比较。但是,您可以这样做:
String[] number;
String userInput = "";
String[] commands = { "random", "exit", "help"};
double[] coord1 = new double[0];
double[] coord2 = new double[0];
Scanner scan = new Scanner(System.in);
do {
System.out.println("Enter Coordinates (ex 1,3)\n");
userInput = scan.nextLine();
if(!userInput.equals(commands[1]))
{
number = userInput.split(",");
if(number.length != 2 || !number[0].matches("\\d+") || !number[1].matches("\\d+"))
{
System.out.println("Error: Invalid Input! Try again");
}
else
{
//our index to place our numbers will be the current length of our array
int index = coord1.length;
double[] temp = new double[coord1.length + 1];
//copy the content to the same array but just 1 size bigger
System.arraycopy(coord1, 0, temp, 0, coord1.length);
coord1 = temp;
temp = new double[coord2.length + 1];
System.arraycopy(coord2, 0, temp, 0, coord2.length);
coord2 = temp;
//now use our index to place the numbers in the correct locations
coord1[index] = Double.parseDouble(number[0]);
coord2[index] = Double.parseDouble(number[1]);
}
}
} while (!userInput.equals(commands[1]));
for(int i = 0; i < coord1.length; i++)
{
System.out.println(i + " - X: " + coord1[i] + " Y: " + coord2[i]);
}
答案 2 :(得分:0)
我想你想要
print(sorted(result, key=operator.itemgetter(1), reverse=True)[0])
即。没有循环。
答案 3 :(得分:0)
问题是,现在您正在对第二个列表进行排序,例如:['cat1', 0.0]
。但是,您确实在尝试对result
列表进行排序。所以你可以使用lambda表达式执行以下操作:
>>> sorted_list = sorted(result, key=lambda cat: cat[1], reverse=True)
>>> sorted_list
[['cat3', 0.89], ['cat2', 0.487], ['cat1', 0.0]]
请注意,此处cat
是您的子列表,您要排序的键是您的子列表第二个值cat[1]