由于某种原因,以下代码生成一个具有重复值的集合 我不确定如何定义ruby中数组的唯一性,所以这可能是某种可预期的?
require 'set'
xs = [1, 2, 3]
xss = Set.new []
xs.each do |x|
xss.merge xss.to_a.map{|xs| xs.push x}
xss.add [x]
p xss
end
将打印
#<Set: {[1]}>
#<Set: {[1, 2], [1, 2], [2]}>
#<Set: {[1, 2, 3, 3], [1, 2, 3, 3], [2, 3], [1, 2, 3, 3], [2, 3], [3]}>
怎么了?
EDIT
将xs.push x
更改为xs + [x]
即可解决问题。
答案 0 :(得分:7)
您正在有效地更改集合中的对象,这是不允许的。
Set假定每个元素的标识在存储时不会更改。修改集合的元素会将集合渲染为不可靠状态。
关于comment
我想要
a = [1, 2, 3] (1..a.size).flat_map { |n| a.combination(n).to_a } #=> [[1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]
您可以使用Array#combination
:
Mu = pd.DataFrame()
lis = []
for date in daterange:
path = 'Z:/directory/to/files' + date + '.txt'
frame = pd.read_csv(path,delimiter=' ', skipinitialspace=True,usecols=[0,1,2,3],
names = ['date','time','type1','type2'],
parse_dates = {'timestamp': ['date','time']})
lis.append(frame)
Mu = pd.concat(lis, axis =0, ignore_index = True)