我有一个ID文件(my_ID_file),每行一个ID,没有其他多余的白色空格.它是使用cut命令从另一个文件创建的.该文件看起来像101行...
PA10
PA102
PA103
PA105
PA107
PA109
Run Code Online (Sandbox Code Playgroud)
我试图在for循环中使用这些ID来创建目录结构.所以我使用readarray函数来创建数组...
readarray TIDs < my_ID_file
Run Code Online (Sandbox Code Playgroud)
然后使用for循环来创建目录结构......
for T in "${TIDs[@]}"
do
mkdir "$T"_folder
done
Run Code Online (Sandbox Code Playgroud)
这会产生名为....的目录
PA10?_folder
PA102?_folder
PA103?_folder
PA105?_folder
PA107?_folder
PA109?_folder
Run Code Online (Sandbox Code Playgroud)
但是,如果我手动声明数组....
TIDs=(PA10 PA102 PA103 PA105 PA107 PA109)
Run Code Online (Sandbox Code Playgroud)
然后运行for循环我得到正确的目录结构,如....
PA10_folder
PA102_folder
PA103_folder
PA105_folder
PA107_folder
PA109_folder
Run Code Online (Sandbox Code Playgroud)
这些问号来自哪里?如何从这样的文件中声明数组,而不会在后续使用数组时出现这个问号?
谢谢
有一种简单的方法来迭代一个可迭代的对象,它允许指定一个终点,比如-1,以及枚举中的起始点.例如
for i, row in enumerate(myiterable, start=2): # will start indexing at 2
Run Code Online (Sandbox Code Playgroud)
因此,如果我的对象长度为10,那么让它开始在索引2处迭代并停止在索引9处迭代的最简单方法是什么?
或者,来自itertools的东西更适合这个.我对高性能方法特别感兴趣.
另外,当在2.6中引入启动选项时,是否有任何理由没有停止选项?
干杯
我试图定义一个函数来创建一个双层字典,所以它应该生成格式
dict = {tier1:{tier2:value}}.
Run Code Online (Sandbox Code Playgroud)
代码是:
def two_tier_dict_init(tier1,tier2,value):
dict_name = {}
for t1 in tier1:
dict_name[t1] = {}
for t2 in tier2:
dict_name[t1][t2] = value
return dict_name
Run Code Online (Sandbox Code Playgroud)
所以下面的例子......
tier1 = ["foo","bar"]
tier2 = ["x","y"]
value = []
foobar_dict = two_tier_dict_init(tier1,tier2,value)
Run Code Online (Sandbox Code Playgroud)
从它的表面产生我想要的东西:
foobar_dict = {'foo':{'x': [],'y':[]},
'bar':{'x': [],'y':[]}} }
Run Code Online (Sandbox Code Playgroud)
但是,当附加任何值时
foobar_dict["foo"]["x"].append("thing")
Run Code Online (Sandbox Code Playgroud)
所有值都会被追加,结果如下:
foobar_dict = {'foo':{'x': ["thing"],'y':["thing"]},
'bar':{'x': ["thing"],'y':["thing"]}}
Run Code Online (Sandbox Code Playgroud)
起初我假设由于我的定义构建字典的方式,所有值都指向内存中的相同空间,但我无法弄清楚为什么会出现这种情况.然后我发现如果我将值从空列表更改为整数,当我执行以下操作时,
foobar_dict["foo"]["x"] +=1
Run Code Online (Sandbox Code Playgroud)
只更改所需的值.
因此,我必须得出结论,这与该list.append方法有关,但我无法弄明白.解释是什么?
注意我需要这个函数来构建大型字典词典,其中每个层都有数百个元素.我也使用相同的方法来构建一个出现相同问题的三层版本.
我有一个大的(450MB/2.5亿行)1s和0s的平面文件,看起来像这样......
1
0
0
1
0
1
0
etc...
Run Code Online (Sandbox Code Playgroud)
我使用以下方法将其读入R ...
dat <- as.numeric(readLines("my_large_file"))
Run Code Online (Sandbox Code Playgroud)
我得到了理想的数据结构,但需要很长时间.有什么建议可以更快的方法来达到相同的效果吗?
NB.1和0的顺序对于保存很重要.我会在unix命令行的python中考虑选项,但是在R中需要最终的数据结构来绘制图形.
我有一个制表符分隔文件...
123 1:2334523 yes
127 1:332443 yes
113 1:332443 no
115 1:55434 no
115 1:55434 no
115 1:55434 yes
Run Code Online (Sandbox Code Playgroud)
我想计算第2列中的值出现在第2列中的次数,然后将其打印到行的末尾,如...
123 1:2334523 yes 1
127 1:332443 yes 2
113 1:332443 no 2
115 1:55434 no 3
115 1:55434 no 3
115 1:55434 yes 3
Run Code Online (Sandbox Code Playgroud)
所以在第2栏1:332443出现两次,1:55434出现3次.
我认为这应该在Awk或sed中相对容易,但还没有设法弄明白.