如何从可迭代对象一次生成多个项目?
例如,对于任意长度的序列,如何在每次迭代的X个连续项的组中迭代序列中的项?
我想将列表拆分为具有相同列数的行,我正在寻找最佳(最优雅/ pythonic)方式来实现此目的:
>>> split.split_size([1,2,3], 5, 0)
[[1, 2, 3, 0, 0]]
>>> split.split_size([1,2,3,4,5], 5, 0)
[[1, 2, 3, 4, 5]]
>>> split.split_size([1,2,3,4,5,6], 5, 0)
[[1, 2, 3, 4, 5], [6, 0, 0, 0, 0]]
>>> split.split_size([1,2,3,4,5,6,7], 5, 0)
[[1, 2, 3, 4, 5], [6, 7, 0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)
这就是我到目前为止所提出的:
def split_size(l, size, fillup):
"""
splits list into chunks of defined size, fills up last chunk with fillup if below size
"""
# len(l) % size or size
# does i.e. …Run Code Online (Sandbox Code Playgroud) 我有一个已知格式/结构的二进制文件.
如何将所有二进制数据读入结构数组?
像(在伪代码中)
bytes = read_file(filename)
struct = {'int','int','float','byte[255]'}
data = read_as_struct(bytes, struct)
data[1]
>>> 10,11,10.1,Arr[255]
Run Code Online (Sandbox Code Playgroud)
编辑:
目前解决方案:
data = []
fmt = '=iiiii256i'
fmt_s = '=iiiii'
fmt_spec = '256i'
struct_size = struct.calcsize(fmt)
for i in range(struct_size, len(bytes)-struct_size, struct_size):
dat1= list(struct.unpack(fmt_s, bytes[i-struct_size:i-1024]))
dat2= list(struct.unpack(fmt_spec, bytes[i-1024:i]))
dat1.append(dat2)
data.append(dat1)
Run Code Online (Sandbox Code Playgroud) 是否有单行表达式来完成以下操作:
input = ['this', 'is', 'a', 'list']
output = [('this', 'is'), ('a', 'list')]
Run Code Online (Sandbox Code Playgroud)
我最初的想法是创建两个列表,然后将它们压缩.这将需要三行.
该列表将具有偶数个元素.
如果我有这个字符串:
"0110100001100101011011000110110001101111"
Run Code Online (Sandbox Code Playgroud)
如何将每八个字符分成较小的字符串,并将其放入一个列表中,以便它看起来像这样?:
['01101000','01100101','01101100','01101100','01101111']
Run Code Online (Sandbox Code Playgroud)
到目前为止,我无法弄清楚这是怎么可能的.
我应该提一下,因为我的字符串是二进制的,所以长度总是8的倍数.
到目前为止,这是我的代码:
for keys, values in CountWords.items():
val = values
print("%s: %s \t %s: %s" % (keys, val, keys, val))
Run Code Online (Sandbox Code Playgroud)
当它被打印时,它将输出该键及其值,然后在空格后输出相同的内容.我想知道的是,如果我能得到第二个%s:%s来从字典中选择下一个键和值.
我有这种情况:我有一个字符串,我想分割每个X字符.我的问题是split方法只根据字符串拆分字符串,例如:
a = 'asdeasxdasdqw'
print a.split('x')
>>>['asdeasx', 'dasdqw']
Run Code Online (Sandbox Code Playgroud)
我需要的是类似于:
[伪]
paragraph = 'my paragraph'
split_offset = 4
print paragraph.split(split_offset)
>>> ['my pa', 'ragraph']
Run Code Online (Sandbox Code Playgroud) 我有一个列表中的扑克牌序列。有 4 个玩家,因此列表中的每四个元素代表一个技巧。我必须一起处理 4 张牌才能找到技巧赢家。我需要一次拆分列表四个元素。我目前正在做以下事情:
cardSequnce = [
'D7', 'D8', 'DT', 'DA',
'H2', 'H7', 'HK', 'H5',
'H3', 'HT', 'HA', 'HQ',
'H8', 'D2', 'H4', 'HJ',
'D6', 'D3'
]
four_card = []
for index, card in enumerate(cardSequnce):
if(index % 4 == 0):
# process four_card
four_card = []
four_card.append(card)
Run Code Online (Sandbox Code Playgroud)
我认为使用python的力量我可以做得比这更好。我可以同时访问 4 张卡吗?任何人都可以帮助我使我的代码更加 Pythonic 吗?
考虑两个列表推导gamma和delta几乎冗余的代码.区别在于切片名单alpha和beta,即
gamma = [alpha[i:i+30] for i in range(0,49980,30)]
delta = [beta[i:i+30] for i in range(0,49980,30)]
Run Code Online (Sandbox Code Playgroud)
是否有一种pythonic方式将其写成一个衬垫(比方说gamma,delta = ...)?
我还有一些其他类似的代码,它们本质上是相似的,我想简化代码的看似冗余.
我正在尝试以其他方式打印十六进制...
首先,我将其转换(字节串是变量的名称):
b'\xff\x00\xff\xff\xff'
Run Code Online (Sandbox Code Playgroud)
十六进制
print(bytestring.hex())
Run Code Online (Sandbox Code Playgroud)
输出:
ff00ffffff
Run Code Online (Sandbox Code Playgroud)
但我已经尝试了一段时间以使其输出:
ff 00 ff ff ff
Run Code Online (Sandbox Code Playgroud)
但没有运气。
有什么建议么?干杯!
更新:
stringdata = f.read(5)
print(stringdata)
#b'\xff\x00\xff\xff\xff'
readHex = " ".join(["{:02x}".format(x) for x in stringdata.hex()])
# ValueError: Unknown format code 'x' for object of type 'str'
Run Code Online (Sandbox Code Playgroud) python ×10
python-3.x ×3
string ×2
binaryfiles ×1
dictionary ×1
grouping ×1
hex ×1
iteration ×1
iterator ×1
key-value ×1
python-2.7 ×1
split ×1
yield ×1