在python中,如何使用列表推导来连接3个列表?
有:
list1 = [1,2,3,4]
list2 = [5,6,7,8]
list3 = [9,10,11,12]
Run Code Online (Sandbox Code Playgroud)
想:
allList = [1,2,3,4,5,6,7,8,9,10,11,12]
Run Code Online (Sandbox Code Playgroud)
我尝试使用列表理解,但我还不是很擅长.这些是我尝试过的:
allList = [n for n in list1 for n in list2 for n in list3 ]
Run Code Online (Sandbox Code Playgroud)
这是一个坏主意,显然并且产生了值(len1)*len(list2)*len(list3)值.哎呀.所以我尝试了这个:
allList = [n for n in list1, list2, list3]
Run Code Online (Sandbox Code Playgroud)
但这给了我allList = [list1,list 2,list3](3个列表清单)
我知道你可以使用+运算符连接(如x = list1 + list2 + list3),但是你如何使用简单的列表理解呢?
这里有一个类似的问题:连接3个单词列表,但那是C#.
这类似于这个dplyr滞后帖,这个dplyr变异延迟发布,但是这些都没有问这个关于默认为输入值的问题.我正在使用dplyr来改变一个新字段,该字段是另一个字段的滞后偏移量(我已转换为POSIXct).目标是,对于给定的ip,我想知道一些关于它在我的列表中显示的所有时间之间的增量的汇总统计数据.我也有大约1200万行.
数据看起来像这样(在变异之前)
ip hour snap
192.168.1.2 2017070700 0
192.168.1.2 2017070700 15
192.168.1.4 2017070700 0
192.168.1.4 2017070701 45
192.168.1.4 2017070702 30
192.168.1.7 2017070700 15
Run Code Online (Sandbox Code Playgroud)
'hour'是一个整数,但应该是一个时间戳.
'snap'是4个'快照'值之一,代表15分钟的增量.
这是data.frame创建代码:
test <- data.frame(ip=c("192.168.1.2","192.168.1.2","192.168.1.4","192.168.1.4","192.168.1.4","192.168.1.7"), hour=c(2017070700,2017070700,2017070700,2017070701,2017070702,2017070700), snap=c(0,15,0,45,30,15))
Run Code Online (Sandbox Code Playgroud)
每个ip有数百甚至数千个时间戳.下面的代码使用dplyr来
这些步骤参考每行末尾的注释.
timedelta <- test %>%
mutate(snap = formatC(snap, width=2, flag=0)) %>% # a)
mutate(fulldateint = paste(hour, snap, sep="")) %>% # b)
mutate(fulldate = as.POSIXct(strptime(fulldateint, "%Y%m%d%H%M"))) %>% # c)
group_by(ip) %>% # d)
mutate(shifted = dplyr::lag(fulldate, default=fulldate)) %>% # …
Run Code Online (Sandbox Code Playgroud) 我编写了一个函数来检查列表中是否存在值,如果存在则返回True.它适用于完全匹配,但如果值存在于列表条目中的任何位置,我需要它返回True(例如,值<= listEntry,我认为.)这是我用于函数的代码:
def isValInLst(val,lst):
"""check to see if val is in lst. If it doesn't NOT exist (i.e. != 0),
return True. Otherwise return false."""
if lst.count(val) != 0:
return True
else:
print 'val is '+str(val)
return False
Run Code Online (Sandbox Code Playgroud)
如果不循环遍历整个字符串和/或使用RegEx(除非那些是最有效的),我应该如何以pythonic方式进行此操作?
这与另一个SO问题非常相似,但我需要检查列表中任何位置是否存在ENTIRE val字符串.返回匹配的索引/索引也很棒,但我确信Stackoverflow上的其他内容已经覆盖了.
作为一名自学成才的程序员,我学会了使用交互式控制台进行调试,该控制台在构建/运行脚本时将所有变量保存在内存中.但是,我注意到在IDE中进行调试的压倒性趋势(并且,我认为CLI +编辑器解决方案就此而言)是在一个地方构建脚本并提供单独的控制台"沙箱"类型区域,只有在您复制时才保留变量/粘贴你的代码.
如何在没有交互式控制台的情况下调试?任何人都可以列出一些可以帮助我成为更好的程序员/调试器的调试步骤吗?
目前,这是我所做的非常简化的版本:
我有 2 个箱线图,我还想在其中包含一个平均值点。看来,当您包含 Horizontal=TRUE 作为参数时,points() 函数不再在箱线图上绘制点。
这是我的数据:
fired <- c(34,37,37,38,41,42,43,44,44,45,45,45,46,48,49,53,53,54,54,55,56)
Run Code Online (Sandbox Code Playgroud)
对于垂直箱线图:
> boxplot(fired,
+ main = "Fired Boxplot",
+ col=(c("gold")))
> points(mean(fired), lwd=5, col="darkred", pch=22)
Run Code Online (Sandbox Code Playgroud)
但对于水平箱线图(相同的数据和函数,但一个参数发生变化):
> boxplot(fired,
+ horizontal=TRUE,
+ main = "Fired Boxplot",
+ col=(c("gold")))
> points(mean(fired), lwd=5, col="darkred", pch=22)
Run Code Online (Sandbox Code Playgroud)
为什么它不绘制水平= TRUE 情况下的点?它只是轴上的一个值。