Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python制作n个唯一的l长0-1系列_Python_List_Function_Random_Unique - Fatal编程技术网

用Python制作n个唯一的l长0-1系列

用Python制作n个唯一的l长0-1系列,python,list,function,random,unique,Python,List,Function,Random,Unique,我想做n个随机l长的0-1系列,这样它们都是不同的。我试着用while循环来制作它们,但是效率很低。我想知道是否有更好的办法。(我编写了一个单独的函数,返回1L长的0-1系列,并在我的另一个函数中使用了它。) 将numpy导入为np alph=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','s','s','0','1','2','3'

我想做n个随机l长的0-1系列,这样它们都是不同的。我试着用while循环来制作它们,但是效率很低。我想知道是否有更好的办法。(我编写了一个单独的函数,返回1L长的0-1系列,并在我的另一个函数中使用了它。)

将numpy导入为np
alph=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','s','s','0','1','2','3','4','5','6','7','8','9']
类错误(异常):
定义初始化(自身、文本、数据):
self.text=文本
self.data=数据
定义(自我):
返回str(self.text)+str(self.data)
def钥匙总成(左):
a=np.random.randint(2,size=(l))
返回“”。加入([str(i)代表a中的i])
定义目录(k):
如果2**k
例如3个长1-0系列:010、100、111。。。。
我想做一个这样的字典,没有while循环,有时我会得到不同键的相同值。如果您能帮助我更正代码,我将不胜感激。

您编写的代码非常晦涩,没有描述您的总体问题

alph
的目的是什么?这只是
n=len(alph)
,但即使是这一点也不清楚,因为现在运行的是长度为
nxn
的双循环。那么,你想创建哪些独特的序列呢

同样,对于长度为3的序列,只有7个(2^3-1),但len(alph)要长得多。因此,您的代码应该为您的示例引发一个异常“0/1序列不够,无法将不同的序列分配给不同的字母,k太小:3”

显示的代码中的另一个问题是未定义
key[]
。你是说字母[]

也许主要的问题是:你在i,j上运行一个双循环。但您只能根据键
i
将结果保存在地图中

如果我不得不猜测你想做什么,那就是在
alph
中生成一个字母的自动代码/编码,使之成为某种唯一的0-1代码(注意,这些代码序列必须大于3,更像
int(math.log2(len(alph)))+1
)。如果我猜测正确,您的
else
分支基本上应该是:

        letter={}
        for i in alph:
          newseq = key_gen(k)
          while newseq in letters.values():
            newseq = key_gen(k)
          letter[i] = newseq
        return letter
但如果我继续猜测,一个实际有效的方法是:

def dict_gen(alph):
  codes = list(range(len(alph)))
  # now scramble
  n_scramble = len(alph) * 5 # choose
  rngs = np.random.randint(len(alph), size=(n_scramble,2))
  for r in rngs: 
    codes[r[0]], codes[r[1]] = codes[r[1]], codes[r[0]]
  length = int(math.log2(len(alph))) + 1
  fmt = '{{0:0{}b}}'.format(length)
  letters = { c: fmt.format(codes[i]) for i,c in enumerate(alph) }
  return letters

你说的0-1系列是什么意思?你能举个例子吗?你能把你到目前为止试过的东西贴出来吗?为什么你认为它效率低下?还有,不断出现的“I”是什么?@Avian我更新了我的问题。@navneethc我更新了我的问题。“l”只是一个像“n”这样的随机字母,可以指任何整数,它是随机生成的0-1系列的长度。为什么要在位级别工作?如果您想要长度为3的二进制序列,为什么不生成0到7之间的整数呢?通过使用一个集合来拒绝重复项,或者通过洗牌整个范围并按顺序挑选所需数量的元素,也可以更容易地确保唯一性。一旦你把你的问题转化为它的整数等价物,你就可以很容易地在这里找到好的现有解决方案。