我根据满足的另一列中的条件从列中提取数据的子集.
我可以返回正确的值,但它位于pandas.core.frame.DataFrame中.如何将其转换为列表?
import pandas as pd
tst = pd.read_csv('C:\\SomeCSV.csv')
lookupValue = tst['SomeCol'] == "SomeValue"
ID = tst[lookupValue][['SomeCol']]
#How To convert ID to a list
Run Code Online (Sandbox Code Playgroud) 我需要将linq查询结果转换为列表.我尝试了以下代码:
var qry = from a in obj.tbCourses
select a;
List<course> lst = new List<course>();
lst = qry.ToList();
Run Code Online (Sandbox Code Playgroud)
上面的代码发生以下错误:
Cannot implicitly convert type
System.Collections.Generic.List<Datalogiclayer.tbcourse> to
System.Collections.Generic.List<course>
Run Code Online (Sandbox Code Playgroud) 我有一个项目列表和LINQ查询.现在,使用LINQ的延迟执行,后续的foreach循环是否只执行一次查询或循环中的每次转弯?
给出这个例子(取自LINQ查询简介(C#),在MSDN上)
// The Three Parts of a LINQ Query:
// 1. Data source.
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
// 2. Query creation.
// numQuery is an IEnumerable<int>
var numQuery =
from num in numbers
where (num % 2) == 0
select num;
// 3. Query execution.
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}
Run Code Online (Sandbox Code Playgroud)
或者,换句话说,如果我有以下情况会有什么不同:
foreach (int num in numQuery.ToList())
Run Code Online (Sandbox Code Playgroud)
而且,如果底层数据不在数组中,而是在数据库中,这是否重要?
我遇到了一个有趣的问题.知道ConcurrentDictionary<TKey, TValue>在被修改时安全可枚举,(在我的情况下)迭代可能消失或多次出现的元素的不必要的副作用,我决定自己创建一个快照,使用ToList().既然ConcurrentDictionary<TKey, TValue>也实现了ICollection<KeyValuePair<TKey, TValue>>,这会导致List(IEnumerable<T> collection)使用它Count,然后使用当前项目在字典的当前大小中创建一个数组,然后尝试复制项目using ICollection<T>.CopyTo(T[] array, int arrayIndex),调用它的ConcurrentDictionary<TKey, TValue>实现,最后抛出一个ArgumentExceptionif元素被添加在此期间到字典.
全部锁定会破坏使用集合的重点,所以我的选择似乎是继续捕获异常并重试(这绝对不是问题的正确答案),或者实现我自己的ToList()专用版本对于这个问题(但是再一次,简单地增加一个列表然后可能将其修剪为适合几个元素的大小似乎是一种过度杀伤,并且使用LinkedList会降低索引性能).
此外,似乎添加某些LINQ方法在后台创建某种缓冲区(例如OrderBy)似乎以性能为代价来修复问题,但裸露ToList()显然没有,并且它不值得"扩充"当不需要其他功能时,使用另一种方法.
这可能是任何并发收集的问题吗?
在创建此类快照时,将性能命中率降至最低的合理解决方法是什么?(最好在一些LINQ魔法结束时.)
编辑:
在调查之后,我可以确认,ToArray()(我认为我昨天刚刚通过它)确实解决了快照问题,只要它只是一个简单的快照,在拍摄快照之前需要额外的功能时它没有帮助(例如过滤,排序),最后还需要一个列表/数组.(在这种情况下,需要额外调用,重新创建新集合.)
我没有指出快照可能需要也可能不需要经过这些修改,所以应该在最后进行,最好是,所以我将这个添加到问题中.
(另外,如果有人对标题有更好的想法,请告诉.)
我在寻找拇指规则调用ToList/ToArray/MemoizeAll(Rx)上IEnumerables,为返回的时候不是返回查询本身IEnumerable的东西.
通常我发现最好只返回查询并让调用者决定是否需要列表,但有时它会因为linq的惰性而回来并咬你.
我想收集指南,例如:
调用ToList如果:
- 你创建新对象(例如在选择中)
- 您的查询中有副作用
否则,返回查询
当我查看在调试器中填充单个项目的列表时,其_items字段包含4个元素.你能解释一下这种行为吗?
我发现,虽然我调试控制台应用程序,以了解Distinct和ToList和结果混淆了我.码:
List<int> nums = new List<int>() { 6, 6, 6, 6, 6, 6, 6, 6 };
List<int> distinctNums = nums.Distinct().ToList();
int[] distinctNums2 = nums.Distinct().ToArray();
Run Code Online (Sandbox Code Playgroud)
distinctNums 有4个元素_items:(6, 0, 0, 0)这显然是错误的.distinctNums2有1项(6)是正确的.我的问题是ToLinq()方法:
我没有理解为什么第一个请求没有问题,但是第二个请求给我一个例外:
(LINQ to Entities中不支持LINQ表达式arrayIndex n的节点类型)
var q = from a in ctx.ImmImmobilisations select a;
q = q.Where(x => x.CodeEntite == "EDEF");
q = q.Where(x => x.CodeAffectation == "000001");
q = q.Where(x => x.Unite == "ITS");
q = q.OrderBy(x => x.CodeImmobilisation);
List<ImmImmobilisation> res = q.ToList();
var query = from e in ctx.ImmImmobilisations select e;
if (!string.IsNullOrEmpty(args[0])) query = query.Where(x => x.CodeEntite == args[0]);
if (!string.IsNullOrEmpty(args[1])) query = query.Where(x => x.CodeAffectation == args[1]);
if (!string.IsNullOrEmpty(args[2])) query = query.Where(x => x.CodeFamille == …Run Code Online (Sandbox Code Playgroud) 我有一个ObservableCollection日志,我通过属性绑定到我的GUI
public ObservableCollection<ILog> Logs {get; private set;}
Run Code Online (Sandbox Code Playgroud)
需要在其他地方显示日志的子集,所以我有:
public ObservableCollection<ILog> LogsForDisplay
{
get
{
ObservableCollection<ILog> displayLogs = new ObservableCollection<ILog>();
foreach (Log log in Logs.ToList()) // notice the ToList()
{
if (log.Date != DateTime.Now.Day)
continue;
displayLogs.Add(log);
}
return displayLogs;
}
Run Code Online (Sandbox Code Playgroud)
在我添加"ToList()"之前,我偶尔会遇到"收集被修改;枚举操作可能无法执行"的例外情况.有意义的是 - 当我迭代它时,有人可以添加到Logs.我从Collection中修改了"ToList"的想法; 枚举操作可能不会执行,这似乎表明ToList是要走的路,并暗示它的线程安全.但是ToList()线程安全吗?我假设在内部它必须使用列表并迭代它?如果有人同时添加该列表怎么办?仅仅因为我没有看到问题并不意味着没有问题.
我的问题.ToList()线程是否安全?如果没有,保护日志的最佳模式是什么?如果ToList()是线程安全的,你有引用吗?
奖金问题.如果要求改变,我需要在GUI上显示的是LogsForDisplay和NOT Logs,我可以将Logs更改为其他可以解决问题的东西吗?如ImmutableList?然后,我不必调用ToList <>,我认为这需要一些时间来制作副本.
如果我能提供澄清,请告诉我.谢谢,
戴夫
好的,所以我想DropDownList从我的对象列表中创建一个是我的获取对象方法
public List<Category> GetCategoriesList()
{
BaseShopEntities context = new BaseShopEntities();
List<Category> uniqCategories = (from c in context.Category
select c).Distinct().ToList<Category>();
return uniqCategories;
}
Run Code Online (Sandbox Code Playgroud)
我试图把它变成ViewBag这样:
ViewBag.Categories = proxy.GetCategoriesList().ToList();
Run Code Online (Sandbox Code Playgroud)
如果我只使用Categorys的名称并将其解析为字符串没有问题,但我也需要ID
我想得到这样的数据,但不知道如何
@Html.DropDownList("CategoryID", new SelectList(ViewBag.Categories.Name));
Run Code Online (Sandbox Code Playgroud) 给定内存(不是LINQ to SQL)类列表:
List<MyClass> myItems = /*lots and lots of items*/;
Run Code Online (Sandbox Code Playgroud)
我正在使用一个GroupBy()声明进行分组:
myItems.GroupBy(g => g.Ref)
Run Code Online (Sandbox Code Playgroud)
然后立即消费foreach循环是否有任何区别呼吁.ToList()"组"或我应该只使用IEnumerable.
完全代码示例:
ToList()List<List<MyClass>> groupedItemsA = new List<List<MyClass>>();
List<List<MyClass>> groupedItemsB = new List<List<MyClass>>();
List<MyClass> myItems = /*lots and lots of items*/;
List<IGrouping<string, MyClass>> groupedItems = myItems.GroupBy(g => g.Ref).ToList();
foreach(IGrouping<string, MyClass> item in groupedItems)
{
if (/*check something*/)
{
groupedItemsA.Add(item.ToList());
}
else
{
groupedItemsB.Add(item.ToList());
}
}
Run Code Online (Sandbox Code Playgroud)
要么
IEnumerableList<List<MyClass>> groupedItemsA = new List<List<MyClass>>();
List<List<MyClass>> …Run Code Online (Sandbox Code Playgroud) tolist ×10
linq ×7
c# ×5
.net ×2
asp.net-mvc ×1
distinct ×1
html-select ×1
ienumerable ×1
pandas ×1
performance ×1
python ×1
razor ×1
viewbag ×1