Tag: 列表

同时合并列表中的多个data.frames

我有我想要合并的许多data.frames的列表。 这里的问题是,每个data.frame在行数和列数方面有所不同,但它们都共享关键variables(在下面的代码中我称之为"var1"和"var2" )。 如果数据框架在列方面是相同的,那么我只能用rbind来表示,plyr的rbind.fill会做这个工作,但是这些数据并不是这样。 由于merge命令只适用于2个data.frames,所以我转向Internet寻求想法。 我从这里得到了这个,在R 2.7.2中完美的工作,这正是我当时所做的: merge.rec <- function(.list, …){ if(length(.list)==1) return(.list[[1]]) Recall(c(list(merge(.list[[1]], .list[[2]], …)), .list[-(1:2)]), …) } 我会这样调用函数: df <- merge.rec(my.list, by.x = c("var1", "var2"), by.y = c("var1", "var2"), all = T, suffixes=c("", "")) 但是在2.7.2之后的任何R版本中,包括2.11和2.12,这段代码都会失败,并出现以下错误: Error in match.names(clabs, names(xi)) : names do not match previous names (可以肯定的是,我在其他地方看到其他引用,没有解决scheme)。 有什么办法可以解决这个问题吗?

什么是在块中迭代列表的最“pythonic”方式?

我有一个Python脚本,需要input一个整数列表,我需要一次处理四个整数。 不幸的是,我没有控制input,或者我将它作为四元组元素列表传入。 目前,我正在这样迭代它: for i in xrange(0, len(ints), 4): # dummy op for example code foo += ints[i] * ints[i + 1] + ints[i + 2] * ints[i + 3] 它看起来很像“C-think”,这让我怀疑有一种更为pythonic的方式来处理这种情况。 该列表在迭代后被丢弃,所以不需要保存。 也许像这样会更好? while ints: foo += ints[0] * ints[1] + ints[2] * ints[3] ints[0:4] = [] 尽pipe如此,仍然不太“感觉”正确。 : – / 相关问题: 如何在Python中将列表分成均匀大小的块?

获得一系列列表的笛卡尔积?

我如何从一组列表中获得笛卡尔积(每个可能的值的组合)? input: somelists = [ [1, 2, 3], ['a', 'b'], [4, 5] ] 期望的输出: [(1, 'a', 4), (1, 'a', 5), (1, 'b', 4), (1, 'b', 5), (2, 'a', 4), (2, 'a', 5) …]

如何在维护秩序的同时从列表中删除重复项?

有没有一个内置的从Python的列表中删除重复,同时保持秩序? 我知道我可以使用一组来删除重复,但是破坏了原来的顺序。 我也知道我可以像这样推出我自己的: def uniq(input): output = [] for x in input: if x not in output: output.append(x) return output (感谢解放这个代码示例 。) 但是,如果可能的话,我想利用一个内置的或更多的Pythonic成语。 相关问题: 在Python中,从列表中删除重复项的最快algorithm是什么,以便所有元素都是唯一的, 同时保持顺序 ?

为什么我的ArrayList包含添加到列表中的最后一个项目的N个副本?

我将三个不同的对象添加到一个ArrayList,但列表包含我添加的最后一个对象的三个副本。 例如: for (Foo f : list) { System.out.println(f.getValue()); } 预期: 0 1 2 实际: 2 2 2 我犯了什么错误? 注意:这是针对本网站上出现的大量类似问题的规范问答。

展开列表(不规则)列表

是的,我知道这个主题已经被覆盖了( 在这里 , 这里 , 在 这里 ),但据我所知,所有的解决scheme,除了一个,都失败在这样的列表上: L = [[[1, 2, 3], [4, 5]], 6] 如果期望的输出是 [1, 2, 3, 4, 5, 6] 或者甚至更好,一个迭代器。 我看到的唯一解决scheme适用于任意嵌套在这个问题中find: def flatten(x): result = [] for el in x: if hasattr(el, "__iter__") and not isinstance(el, basestring): result.extend(flatten(el)) else: result.append(el) return result flatten(L) 这是最好的模式? 我忽略了什么? 任何问题?

你如何将一个列表分成均匀大小的块?

我有一个任意长度的列表,我需要将它分成相等大小的块并对其进行操作。 有一些明显的方法可以做到这一点,比如保留一个计数器和两个列表,当第二个列表填满时,将它添加到第一个列表中,并清空下一轮数据的第二个列表,但这可能是非常昂贵的。 我想知道是否有人有一个很好的解决这个任何长度的名单,例如使用发电机。 我正在寻找itertools有用的东西,但我找不到任何明显有用的东西。 虽然可能错过了。 相关的问题: 什么是最“pythonic”的方式来遍历一个列表块?

列表名单意外地反映在子列表上

我需要在Python中创build一个列表,所以我input以下内容: myList = [[1] * 4] * 3 清单看起来像这样: [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]] 然后我改变了最内在的一个值: myList[0][0] = 5 现在我的列表如下所示: [[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]] 这不是我想要或预期的。 有人可以解释一下怎么回事,以及如何解决这个问题?

如何克隆或复制列表?

有哪些选项可以在Python中复制或复制列表? 使用new_list = my_list然后new_list每次my_list改变时修改new_list 。 为什么是这样?

了解Python的切片符号

我需要一个很好的解释(引用是加号)Python的切片符号。 对我来说,这个符号需要一点点的提高。 它看起来非常强大,但我还没有把我的脑袋。