考虑以下示例代码:
let obj = {a: '1', b: '2'};
Object.keys(obj).forEach(function(key, val){
console.log(typeof val); //returns: number
});
console.log(typeof obj['a']); //returns: string
Run Code Online (Sandbox Code Playgroud)
我觉得这种行为非常有趣。它为什么这样做?我认为这与 JavaScript 在某些情况下自动解析变量(例如将数字连接到字符串)以及将所述变量传递给回调函数有关。
我也很好奇是否有一种简单的方法可以保留原始值类型?我知道您可以强制使用特定类型,但是有一种方法可以让它根据最初传递的内容保留一个数字或一个字符串,而不是添加一个变量,然后将其设置为变量类型?
我正在开发一个程序,用于在染色体上的一系列滑动窗口中估计田岛的D统计量.染色体本身也分为许多不同的区域(希望)具有功能意义.滑动窗口分析由我的脚本在每个区域执行.
在程序开始时,我定义了滑动窗口的大小以及从一个窗口移动到下一个窗口的步骤的大小.我导入一个文件,其中包含每个不同染色体区域的坐标,并导入另一个文件,其中包含我正在使用的所有SNP数据(这是逐行读取的,因为它是一个大文件).该程序循环遍历染色体位置列表.对于每一个位置时,它产生的步骤和窗口用于分析的指标,所述SNP数据划分成输出文件(步骤对应),计算每个步骤文件密钥统计,并结合这些统计信息来估计田岛的d为每个窗口.
该程序适用于SNP数据的小文件.它也适用于第一次染色体断裂点的第一次迭代.然而,对于SNP数据的大文件,当程序在每个染色体区域上迭代时,分析中的步长难以理解地降低.对于第一个染色体区域,步长为2500个核苷酸(这是它的假设).然而,对于第二染色体区段,步长为1966,第三染色体区段为732.
如果有人对于为什么会出现这种情况有任何建议,请告诉我.我特别难过,因为这个程序似乎适用于小文件,但不适用于较大的文件.
我的代码如下:
import sys
import math
import fileinput
import shlex
import string
windowSize = int(500)
stepSize = int(250)
n = int(50) #number of individuals in the anaysis
SNP_file = open("SNPs-1.txt",'r')
SNP_file.readline()
breakpoints = open("C:/Users/gwilymh/Desktop/Python/Breakpoint coordinates.txt", 'r')
breakpoints = list(breakpoints)
numSegments = len(breakpoints)
# Open a file to store the Tajima's D results:
outputFile = open("C:/Users/gwilymh/Desktop/Python/Sliding Window Analyses-2/Tajima's D estimates.txt", 'a')
outputFile.write(str("segmentNumber\tchrSegmentName\tsegmentStart\tsegmentStop\twindowNumber\twindowStart\twindowStop\tWindowSize\tnSNPs\tS\tD\n"))
#Calculating parameters a1, a2, b1, b2, c1 and c2
numPairwiseComparisons=n*((n-1)/2)
b1=(n+1)/(3*(n-1))
b2=(2*(n**2+n+3))/(9*n*(n-1))
num=list(range(1,n)) # n-1 values …Run Code Online (Sandbox Code Playgroud) 我的印象是以下代码会打印出"hello world",但它根本不打印任何东西.为什么?使用g ++ 4.2.1和cl ++ 3.2编译.
void iterateBackwards(){
std::string hiThere = "dlrow olleh";
for ( int i = hiThere.length(); i == 0; i--) {
std::cout << hiThere[i];
}
}
Run Code Online (Sandbox Code Playgroud) 我与朋友争吵,因为我不认为fib_2()是递归,但他说这是因为它自称.
我不认为这是因为fib_2()没有一个返回结果用作另一个的参数fib_2().我认为fib_2()是相同的fib_3(),它是一个迭代,而不是递归.
那么它是递归还是不是?
public class Demo {
public static void main(String[] args) {
System.out.printf("fib_1 -> %d\n", fib_1(10));
System.out.printf("fib_2 -> %d\n", fff(10));
System.out.printf("fib_3 -> %d\n", fib_3(10));
}
//This is recursion
public static int fib_1(int n) {
if (n == 1 || n == 2)
return 1;
return fib_1(n - 1) + fib_1(n - 2);
}
//Is this recursion or not ?
public static int fff(int n) {
int a = 1, …Run Code Online (Sandbox Code Playgroud) 我想使用循环中的行来构建一个 numpy 矩阵。但是我如何初始化矩阵?如果我写
A = []
A = numpy.vstack((A, [1, 2]))
Run Code Online (Sandbox Code Playgroud)
我得到
ValueError:除了串联轴之外的所有输入数组维度都必须完全匹配
最好的做法是什么?
注意:我事先不知道行数。列数是已知的。
所以我知道以下命令会在列表中存储所需长度y的所有可能组合,其中y < j:
lapply(y, function(x) combn(j,x))
Run Code Online (Sandbox Code Playgroud)
但是我不希望它们全部存储在列表中,因为稍后我将只访问它们一次,因此将它们存储在内存中效率不高.有没有办法让我可以在某种循环或其他东西中生成每个组合,然后在我完成计算后,它会给我下一个组合?所以基本上我想迭代地生成组合而不是先存储它们.
所以在伪代码中,我想拥有的是:
#loop that will generate each possible combination one by one
loop{
operation that uses combination
}
Run Code Online (Sandbox Code Playgroud) iter在python 中使用该函数有什么用?
而不是做:
for i in range(8):
print i
Run Code Online (Sandbox Code Playgroud)
我也可以用iter:
for iter in range(8):
print iter
Run Code Online (Sandbox Code Playgroud) 写一个函数sum_of_squares(xs)来计算列表xs中数字的平方和.例如,sum_of_squares([2, 3, 4])应返回4 + 9 + 16,即29: