我正在编写一个学校作业的程序,我必须使用.csv文件中的数据。当我打开文件时,我读了它,并保持未格式化(所有项目都是字符串)。我只用逗号分隔它们并在列表中创建列表。我需要找到列表中的最后一项(有3个列表具有相同的最后一项)。它在我的邮件程序中不起作用所以我使用python shell来确认出错了。
>>> l=[['2', '13:00', '22', '0', 'True', '5\n'], ['-1', '14:00', '22', '0', 'True', '5\n'], ['2', '15:00', '23', '0', 'True', '5\n']]
>>> "5\n" in l
False
>>> "5" in l
False
>>>
这是它给我的回应。为什么看不到最后一项?为什么会有这个不必要的“新行”字符?格式化的版本显示为5(整数),所以它显然就在那里。
答案 0 :(得分:2)
您的测试不适用于任何子项目,例如:
>>> '2' in l
False
x in y
检查 直接会员资格。所以如果你问的话应该会有用:
>>> ['2', '13:00', '22', '0', 'True', '5\n'] in l
True
如果您想检查第二个级别成员资格,可以使用:
any("5\n" in li for li in l)
是True
:
>>> any("5\n" in li for li in l)
True
答案 1 :(得分:1)
如果您想要所有最后项目的列表,您可以进行简单的列表理解:
last_items = [m[-1] for m in l]
演示:
>>> last_items = [m[-1] for m in l]
>>> last_items
['5\n', '5\n', '5\n']
答案 2 :(得分:0)
您有一份清单清单。这意味着您必须先索引父列表,然后才能检查项目是否在子列表中。
'5\n' in l[2]
l[2]
访问列表中的第3项(因为索引在Python中基于0)。第3个项目本身就是一个列表,然后您可以进行in
检查。
如果您希望能够轻松对列表清单进行in
检查,那么您运气不佳。您需要编写一个循环遍历父列表中的每个项目,然后对每个子列表进行in
检查,直到找到匹配项。
found = False # track whether we found something or not
for child in l:
if '5\n' in child:
found = True
break # we found it, no need to keep looping
if found:
# if we found something, do something
答案 3 :(得分:0)
$group_num = 0;
$col = collect($data);
$col->groupBy(function ($item, $key) use (&$group_num, $col)
{
if (!isset($col[$key - 1]))
return "block_" . $group_num;
if ($item['user_id'] !== $col[$key - 1]['user_id'])
$group_num++;
return "block_" . $group_num;
})
->toArray();