python – 将元素扩展到.pop中使用的列表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 将元素扩展到.pop中使用的列表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1955字,纯文字阅读大概需要3分钟。
内容图文
![python – 将元素扩展到.pop中使用的列表](/upload/InfoBanner/zyjiaocheng/780/f89fb2b606294f03b75ffad41cf06423.jpg)
我正在尝试创建一个伪随机序列生成器.存在一些约束,第一个约束是每个序列应该有24个实例,并且结果中不应该连续出现序列.这是我的代码:
import random
def rgen():
block_list =[]
while len(block_list) != 96:
sequences = ['seq1','seq2','seq3','seq4']
block_list.extend(random.sample(sequences, 4))
for x,y in enumerate(block_list):
count = 'repeat'
while count == 'repeat':
if block_list[x] == block_list[x-1]:
block_list.pop(x)
block_list.extend(y)
count = 'repeat'
else:
count = 'no repeat'
sequence_counts = {'seq1':0,'seq2':0,'seq3':0,'seq4':0}
for i in block_list:
for k,v in sequence_counts.items():
if k == i:
v += 1
sequence_counts[k] = v
print 'counts for each sequence: ', sequence_counts
print block_list
然而,最终的结果是,我最终在列表末尾有这样的东西:
's', 'e', 'q', '1', 's', 'e', 'q', '1', 's', 'e', 'q', '2', 's', 'e', 'q', '4'
当我真的只想扩展整个列表元素而不是单独的字符.
所以我想扩展上面的整个字符串:
'seq1','seq1','seq2','seq4'
解决方法:
你的问题来自于使用extend()而不是append(). extend()假设您要将列表添加到另一个列表,并将y的每个元素添加到block_list.你不需要使用count,因为你在else语句中立即离开了你的while循环,所以你可以用break()替换它.每个元素的数量也存在问题.您拥有它的方式是删除一个更改索引x处的值的元素.要解决此问题,您知道弹出的值与索引x处的值匹配,因此只需将其设置为变量并将其添加回列表即可.如果在pop()之前和之后打印block_list [x],可以看到这种情况发生
while 1:
if block_list[x] == block_list[x-1]:
y = block_list.pop(x)
block_list.append(y)
#Alternatively, but not recommended, is to do .extend([y])
#That treats y as an element of a list rather than a list itself
else:
break
此外,您现在的方式是将您的列表视为循环.在第一个for循环的第一次迭代中,您将比较索引0和索引-1.
要解决这个问题,你需要像这样使用range()
for x in xrange(1,len(block_list)):
while 1:
if block_list[x] == block_list[x-1]:
y = block_list.pop(x)
block_list.append(y)
else:
break
['seq2', 'seq1', 'seq3', 'seq4', 'seq1', 'seq2', 'seq4', 'seq3',
...,
'seq3', 'seq1', 'seq2', 'seq4', 'seq3', 'seq2', 'seq3', 'seq4']
内容总结
以上是互联网集市为您收集整理的python – 将元素扩展到.pop中使用的列表全部内容,希望文章能够帮你解决python – 将元素扩展到.pop中使用的列表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。