问题描述
我想在循环的 if else 部分之后获取列表,但是如何在对它进行操作之后获取列表。由于从列表中删除 1.00 后不会返回更新的列表,我该如何将其设置为变量并获取它?
注意:'nls' 中的每一项都是一个浮点数列表,无需删除功能即可工作,但如果存在某个值,我需要将其删除
[round((sum(list(i).remove(1.00)) / len(list(i).remove(1.00))),2)
if 1.0 in i else sum(i) / len(i)
for i in zip(nls[0],nls[1],nls[2])]
对于 i 的值:(1.0,214.97,214.97),(2.0,179.99,179.99),(1.0,169.99,169.99)
我想得到 [214.97,120.66,169.99]
解决方法
如果我正确理解了您的问题,可能是这样的吗?
from itertools import zip_longest
from statistics import mean
nls = [
(1.0,2.0,1.0),(214.97,179.99,169.99),169.99)
]
def filter_column(column):
def predicate(value):
from math import isclose
return value is not None and not isclose(value,1.0)
return tuple(filter(predicate,column))
print(list(map(mean,map(filter_column,zip_longest(*nls,fillvalue=None)))))
输出:
[214.97,120.66000000000001,169.99]
>>>
EDIT - 如果所有列都保证具有相同的长度(过滤前),则不需要 itertools.zip_longest
,在这种情况下,也可以更改谓词。
列表推导式在一定程度上很有用,但不能做所有事情。在某个时候,它们可能会不必要地使代码不可读。我会坚持使用一个很好的老式 for 循环来完成这项任务:
function AnkiCard(word,transcription,translation,examples,soundURL) {
this.word = word;
this.transcription = transcription;
this.translation = translation;
this.examples = examples;
this.soundURL = soundURL;
}
function Examples(engExample,rusExample) {
this.engExample = engExample;
this.rusExample = rusExample;
}
function sendTable() {
let cells = document.getElementsByTagName("tr");
let ankiCards = [];
for (let i = 1; i < cells.length; i++) {
let word = cells[i].getElementsByTagName("td").item(0).innerText;
let transcription = cells[i].getElementsByTagName("td").item(1).innerText;
let translation = cells[i].getElementsByTagName("td").item(2).getElementsByTagName("input").item(0).value;
let engExample = cells[i].getElementsByTagName("td").item(3).getElementsByTagName("option");
let selectEngExample = findSelectExample(engExample);
let rusExamples = cells[i].getElementsByTagName("td").item(4).getElementsByTagName("option");
let selectRusExample = findSelectExample(rusExamples);
let examples = new Examples(selectEngExample,selectRusExample);
let soundURL = cells[i].getElementsByTagName("td").item(5).innerText;
const ankiCard = new AnkiCard(word,soundURL);
console.log(translation);
ankiCards.push(ankiCard);
console.log(JSON.stringify(ankiCard));
}
sendRequest(ankiCards)
}
function findSelectExample(examples) {
for (let i = 0; i < examples.length; i++) {
if (examples[i].selected === true) {
return examples[i].innerText;
}
}
}
function sendRequest(ankiCards) {
var xhr = new XMLHttpRequest();
var body = JSON.stringify(ankiCards);
xhr.open("POST",'/save',true);
xhr.setRequestHeader('Content-Type','application/json');
xhr.send(body);
}
,
代码中的错误,不是删除任何特定值而是零值,因此只需除以 len()-1 即可获得所需结果