我想保留列表的第一个和最后一个元素,并在不使用循环的情况下排除符合定义条件的其他元素。第一个和最后一个元素可能有也可能没有删除元素的标准。
作为一个非常基本的例子,
rename
返回$allowed = array('png', 'jpg', 'gif', 'xlsx','zip');
if(isset($_FILES['upl']) && $_FILES['upl']['error'] == 0){
$extension = pathinfo($_FILES['upl']['name'], PATHINFO_EXTENSION);
if(!in_array(strtolower($extension), $allowed)){
echo '{"status":"error"}';
exit;
}
$destination = "uploads/update.xlsx";
if(file_exists($destination)){
rename($destination, "uploads/" . date("Y-m-d\TH:i:sP") . ".xlsx");
}
if(move_uploaded_file($_FILES['upl']['tmp_name'], $destination)){
echo '{"status":"success"}';
exit;
}
}
echo '{"status":"error"}';
exit;
我需要aList = ['a','b','a','b','a']
[x for x in aList if x !='a']
我可以拆分第一个和最后一个值,然后将它们重新连接在一起,但这看起来并不像Pythonic。
答案 0 :(得分:8)
您可以使用切片分配:
>>> aList = ['a','b','a','b','a']
>>> aList[1:-1]=[x for x in aList[1:-1] if x !='a']
>>> aList
['a', 'b', 'b', 'a']
答案 1 :(得分:5)
嗯,您的样本输入和输出与我认为您的问题不符,使用切片绝对是pythonic:
a_list = ['a','b','a','b','a']
# a_list = a_list[1:-1] # take everything but the first and last elements
a_list = a_list[:2] + a_list[-2:] # this gets you the [ 'a', 'b', 'b', 'a' ]
答案 2 :(得分:4)
这是一个列表理解,它明确地使第一个和最后一个元素免于删除,无论它们的值如何:
>>> aList = ['a', 'b', 'a', 'b', 'a']
>>> [ letter for index, letter in enumerate(aList) if letter != 'a' or index in [0, len(x)-1] ]
['a', 'b', 'b', 'a']
答案 3 :(得分:0)
试试这个:
>>> list_ = ['a', 'b', 'a', 'b', 'a']
>>> [value for index, value in enumerate(list_) if index in {0, len(list_)-1} or value == 'b']
['a', 'b', 'b', 'a']
虽然,列表理解变得笨拙。考虑像这样写一个生成器:
>>> def keep_bookends_and_bs(list_):
... for index, value in enumerate(list_):
... if index in {0, len(list_)-1}:
... yield value
... elif value == 'b':
... yield value
...
>>> list(keep_bookends_and_bs(list_))
['a', 'b', 'b', 'a']