非常简单的代码,我有一个带有两个值的字符extraAccessions,一个字符串和一个列表.我想循环遍历extraAccessions(在这个例子中只有一个)并使用元组中的第一个和第二个值.
extraAccessions=('MS:1000505',['value','unitName'])
for accession, fieldIdentifiers in extraAccessions:
[do something]
Run Code Online (Sandbox Code Playgroud)
但是,这给了
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)
当我做
print (extraAccessions)
Run Code Online (Sandbox Code Playgroud)
我明白了
('MS:1000505', ['value', 'unitName'])
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎有两个价值,正是所要求的
for accession, fieldIdentifiers in extraAccessions:
Run Code Online (Sandbox Code Playgroud)
所以我不明白为什么我会收到这个错误.
编辑:
而当我这样做
for accession in extraAccessions:
print accession
Run Code Online (Sandbox Code Playgroud)
我得到第一个元素MS:1000505
我有一个数据框,其中的列包含可变数量的数字和可变数量的NA.数据框如下所示:
V1 V2 V3 V4 V5 V6
1 0 11 4 0 0 10
2 0 17 3 0 2 2
3 NA 0 4 0 1 9
4 NA 12 NA 1 1 0
<snip>
743 NA NA NA NA 8 NA
744 NA NA NA NA 0 NA
Run Code Online (Sandbox Code Playgroud)
我想制作一个箱形图,但是当我这样做的时候
boxplot(dataframe)
Run Code Online (Sandbox Code Playgroud)
我收到了错误
adding class "factor" to an invalid object
Run Code Online (Sandbox Code Playgroud)
当我做
lapply(dataframe,class)
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
$V1
[1] "factor"
$V2
[1] "factor"
<snip>
$V6
[1] "factor"
Run Code Online (Sandbox Code Playgroud)
那么如何更改我的数据框以便将列视为数字?
我有一个SQL查询,我检查一个值是否在表的最大值和最小值之间.我现在实现如下:
SELECT spectrum_id, feature_table_id
FROM 'spectrum', 'feature'
WHERE `spectrum`.msrun_msrun_id = 1
AND `feature`.msrun_msrun_id = 1
AND (SELECT min(rt) FROM `convexhull` WHERE `convexhull`.feature_feature_table_id = `feature`.feature_table_id) <= scan_start_time
AND scan_start_time <= (SELECT max(rt) FROM `convexhull` WHERE 'convexhull'.feature_feature_table_id = 'feature'.feature_table_id)
AND (SELECT min(mz) FROM `convexhull` WHERE `convexhull`.feature_feature_table_id = `feature`.feature_table_id) <= base_peak_mz
AND base_peak_mz <= (SELECT max(mz) FROM `convexhull` WHERE `convexhull`.feature_feature_table_id = `feature`feature_table_id)
Run Code Online (Sandbox Code Playgroud)
这运行得非常慢,因为每次运行此查询时我都会从convexhull中选择4次,所以我尝试使用内部连接来改进它:
SELECT spectrum_id, feature_table_id
FROM 'spectrum', 'feature'
INNER JOIN `convexhull` ON `convexhull`.feature_feature_table_id = `feature`.feature_table_id
WHERE `spectrum`.msrun_msrun_id = ? "+
AND `feature`.msrun_msrun_id …Run Code Online (Sandbox Code Playgroud) 如何更改此代码,以便每60秒调用一次doWork().目前,它正在循环,并在60秒后停止.想要完全相反.
from twisted.internet import task
from twisted.internet import reactor
import twapi
timeout = 200.0 # Sixty seconds
def doWork():
#do work here
twapi.main('1')
pass
l = task.LoopingCall(doWork)
l.start(timeout) # call every sixty seconds
reactor.run()
Run Code Online (Sandbox Code Playgroud) 我有以下递归函数
def collatz(n,seq=[]):
seq.append(n)
if n == 1:
return seq
if n%2 == 0:
return collatz(n/2, seq)
else:
return collatz((3*n)+1, seq)
Run Code Online (Sandbox Code Playgroud)
当我多次运行此函数时,seq仍然包含先前运行的值:
>>> collatz(1)
[1] # correct
>>> collatz(2)
[1, 2, 1] # should be [2,1]
>>> collatz(3)
[1, 2, 1, 3, 10, 5, 16, 8, 4, 2, 1] # should be [3, 10, 5, 16, 8, 4, 2, 1]
Run Code Online (Sandbox Code Playgroud)
防止这种情况的方法是seq在调用时给出一个空列表collatz:
>>> collatz(3,seq=[])
[3, 10, 5, 16, 8, 4, 2, 1]
Run Code Online (Sandbox Code Playgroud)
有没有办法以collatz不同的方式写,以便我可以collatz(3)代替 …
我有两种类型的数据,我想做成对比较:假(控件)和测量,
sham1 <- c('Sham1.r1', 'Sham1.r2', 'Sham1.r3')
sham2 <- c('Sham2.r1', 'Sham2.r2', 'Sham2.r3')
shams <- list(sham1, sham2)
day14 <- c('T14d.r1', 'T14d.r2', 'T14d.r3')
day90 <- c('T90d.r1', 'T90d.r2', 'T90d.r3')
measurements <- list(hour4, day1, day3, day7, day14, day90)
Run Code Online (Sandbox Code Playgroud)
我想得到以下内容:
(('Sham1.r1', 'Sham1.r2', 'Sham1.r3'), ('T14d.r1', 'T14d.r2', 'T14d.r3')), (('Sham1.r1', 'Sham1.r2', 'Sham1.r3'), ('T90d.r1', 'T90d.r2', 'T90d.r3')), (('Sham2.r1', 'Sham2.r2', 'Sham2.r3'), ('T14d.r1', 'T14d.r2', 'T14d.r3')), (('Sham2.r1', 'Sham2.r2', 'Sham2.r3'), ('T90d.r1', 'T90d.r2', 'T90d.r3'))
Run Code Online (Sandbox Code Playgroud)
我想要的是:
list(list(c("Sham1.r1", "Sham1.r2", "Sham1.r3"), c("T14d.r1",
"T14d.r2", "T14d.r3")), list(c("Sham1.r1", "Sham1.r2", "Sham1.r3"
), c("T90d.r1", "T90d.r2", "T90d.r3")), list(c("Sham2.r1", "Sham2.r2",
"Sham2.r3"), c("T14d.r1", "T14d.r2", "T14d.r3")), list(c("Sham2.r1",
"Sham2.r2", …Run Code Online (Sandbox Code Playgroud) 我有一个命名列表列表
t <- list(list(a=1,b=2,c=3), list(a=3, b=2, c=1), list(a=2, b=3, c=1))
[[1]]
[[1]]$a
[1] 1
[[1]]$b
[1] 2
[[1]]$c
[1] 3
[[2]]
[[2]]$a
[1] 3
[[2]]$b
[1] 2
[[2]]$c
[1] 1
[[3]]
[[3]]$a
[1] 2
[[3]]$b
[1] 3
[[3]]$c
[1] 1
Run Code Online (Sandbox Code Playgroud)
我希望得到一个命名列表或数据框,就像这样
$a
[1] 1 3 2
$b
[1] 2 2 3
$c
[1] 3 1 1
Run Code Online (Sandbox Code Playgroud)
目前,我循环遍历命名列表列表,将每个值添加到新的命名列表.我怎么能在一行中做到这一点?
我有一个看起来像这样的元组列表:
[(334.99972431901307, 0.0), (335.00088248902574, 0.0), (335.0020406650446, 0.0), (335.0031988470696, 66.83868408203125), (335.00435703510072, 252.91905212402344), (335.0055152291381, 341.447509765625), (335.00667342918183, 282.1964111328125), (335.0078316352317, 125.92335510253906), (335.00898996725408, 0.0), (335.01014818531672, 0.0)]
Run Code Online (Sandbox Code Playgroud)
该列表的长度为16665,并按每个元组的第一个元素排序.我想基于第一个元组值从列表中提取特定范围的元组.目前我这样做:
def getSpectra_mzWindow(self, mzStart, mzEnd):
for spectrum in self.mzmlInstance:
# loop through all the peaks
for peak in spectrum.peaks:
# it's ordered, so when peak[0] > mzEnd it can stop
if float(peak[0]) > mzEnd:
break
if mzStart <= float(peak[0]) <= mzEnd:
yield spectrum, peak
Run Code Online (Sandbox Code Playgroud)
然而,这非常缓慢.既然我知道它是按照第一个值排序的,那么有没有比循环遍历整个列表更快的方法呢?我正在考虑实现二进制搜索,但是已经有一个已经对已排序元组列表进行优化的库了吗?
我正在尝试编译其他人的C++代码.我自己有0个C++经验.我在MAC上使用g ++来编译我收到的一个.cpp文件.当我这样做时,g++ main.cpp我得到一个未定义的符号错误.当谷歌搜索答案似乎是文件之间的错误链接,但我不知道如何链接文件.如何让文件编译?我粘贴了下面的完整代码.
Undefined symbols:
"initializeFitness()", referenced from:
runEvolution() in ccZXBTDH.o
"Grid::GetNeighbourhood(int, int, std::vector<Agent**, std::allocator<Agent**> >&)", referenced from:
runEvolution() in ccZXBTDH.o
runEvolution() in ccZXBTDH.o
runEvolution() in ccZXBTDH.o
"Grid::Grid()", referenced from:
runEvolution() in ccZXBTDH.o
"Reaper::GetAgentToKill()", referenced from:
runEvolution() in ccZXBTDH.o
"Cupid::GetRandomBreeder()", referenced from:
runEvolution() in ccZXBTDH.o
"Reaper::Select()", referenced from:
runEvolution() in ccZXBTDH.o
"Grid::~Grid()", referenced from:
runEvolution() in ccZXBTDH.o
runEvolution() in ccZXBTDH.o
"Breeder::Breed(Agent**, Agent**)", referenced from:
runEvolution() in ccZXBTDH.o
"Cupid::Select()", referenced from:
runEvolution() in ccZXBTDH.o
"Cupid::GetEmptyCell()", referenced from:
runEvolution() in …Run Code Online (Sandbox Code Playgroud) 我正在尝试打印以下代码返回的值:
Agent** Grid::GetAgent(int x, int y)
{
return &agents[x][y];
}
Run Code Online (Sandbox Code Playgroud)
它返回一个双指针,并打印
std::cout << *grid.GetAgent(j, k) << endl;
Run Code Online (Sandbox Code Playgroud)
给出了一个内存位置,但是当我尝试时
std::cout << **grid.GetAgent(j, k) << endl;
Run Code Online (Sandbox Code Playgroud)
我收到了错误
main.cpp:53: error: no match for ‘operator<<’ in ‘std::cout << * * grid.Grid::GetAgent(j, k)’
Run Code Online (Sandbox Code Playgroud)
如何从*grid.GetAgent(j,k)打印值?
以下是Agent.h
#ifndef AGENT_H
#define AGENT_H
enum AgentType { candidateSolution, cupid, reaper, breeder};
class Agent
{
public:
Agent(void);
~Agent(void);
double GetFitness();
int GetAge();
void IncreaseAge();
AgentType GetType();
virtual void RandomizeGenome() = 0;
protected:
double m_fitness;
AgentType m_type;
private:
int m_age;
};
#endif …Run Code Online (Sandbox Code Playgroud) 我有一个文件夹列表,通过
import glob
list_of_folders = glob.glob('path_to_folder/*')
for folder in list_of_folders:
Run Code Online (Sandbox Code Playgroud)
现在,我想对list_of_folders排序文件夹中的文件数量.就像是
list_of_folders.sort(key= lambda f: len(x) for x in glob.glob(f))
Run Code Online (Sandbox Code Playgroud)
但无论我尝试什么,我都无法得到一个有效的lambda表达式.如何对文件夹中文件数量的文件夹列表进行排序?