Ваш подход:
for x in rem_list:
num_list.remove(x)
интуитивно понятен, и если списки не будут очень большими, я мог бы сделать это, потому что его легко читать.
Одна альтернатива будет:
result = []
for x in num_list:
if x in rem_list:
rem_list.remove(x)
else:
result.append(x)
Это будет O (len (rem_list) ^ len (num_list)) и быстрее, чем первое решение, если len (rem_list) < Len (num_list).
Если бы rem_list гарантированно не содержал дубликатов (согласно вашим примерам), вы могли бы вместо этого использовать набор, и сложность была бы O (len (num_list)).
Я думал бы, что Вы захотите думать о том, если вещи действительно будут принадлежать состояния сеанса. Это - что-то, что я делаю время от времени, и это - хороший подход со строгим контролем типов ко всему этому, но необходимо быть осторожными при помещении вещей в контекст сессии. Не все должно быть там просто, потому что это принадлежит некоторому пользователю.
в global.asax сцепляют событие
void OnSessionStart(...)
{
HttpContext.Current.Session.Add("__MySessionObject", new MySessionObject());
}
OnSessionStart Отовсюду в коде где HttpContext. Текущее свойство! = пустой указатель Вы можете retrive тот объект. Я делаю это с дополнительным методом.
public static MySessionObject GetMySessionObject(this HttpContext current)
{
return current != null ? (MySessionObject)current.Session["__MySessionObject"] : null;
}
Этот путь Вы можете в коде
void OnLoad(...)
{
var sessionObj = HttpContext.Current.GetMySessionObject();
// do something with 'sessionObj'
}
Ну, по моему скромному мнению..
Относительно № 1, у меня есть Основное Представление со строгим контролем типов, которое имеет свойство для доступа независимо от того, что объект Сессии представляет.... в моем экземпляре stongly, введенное Основное Представление универсально, который дает мне некоторую гибкость относительно Страниц Представления со строгим контролем типов
ViewMasterPage<AdminViewModel>
AdminViewModel
{
SomeImportantObjectThatWasInSession ImportantObject
}
AdminViewModel<TModel> : AdminViewModel where TModel : class
{
TModel Content
}
и затем...
ViewPage<AdminViewModel<U>>
Хотя я не знаю о asp.net mvc, но это - то, что мы должны сделать в нормальном веб-сайте .NET. Это должно работать на asp.net mvc также.
YourSessionClass obj=Session["key"] as YourSessionClass;
if(obj==null){
obj=new YourSessionClass();
Session["key"]=obj;
}
Вы поместили бы эту внутреннюю часть метод для легкого доступа. HTH
Если вы используете asp.net mvc, вот простой способ получить доступ к сеансу.
Из контроллера:
{Controller}.ControllerContext.HttpContext.Session["{name}"]
Из представления:
<%=Session["{name}"] %>
Это определенно не лучший способ получить доступ к переменным сеанса, но это прямой маршрут. Поэтому используйте его с осторожностью (желательно во время быстрого создания прототипа) и используйте Wrapper / Container и OnSessionStart, когда это станет уместным.
HTH