我有一个任意长度的列表,我需要将它分成相同大小的块并对其进行操作.有一些明显的方法可以做到这一点,比如保留一个计数器和两个列表,当第二个列表填满时,将它添加到第一个列表并清空下一轮数据的第二个列表,但这可能非常昂贵.
我想知道是否有人对任何长度的列表都有一个很好的解决方案,例如使用生成器.
我一直在寻找有用的东西,itertools
但我找不到任何明显有用的东西.但是可能会错过它.
我有一个Python脚本,它将整数列表作为输入,我需要一次使用四个整数.不幸的是,我无法控制输入,或者我将它作为四元素元组列表传入.目前,我正在以这种方式迭代它:
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]
Run Code Online (Sandbox Code Playgroud)
它看起来很像"C-think",这让我怀疑有更多的pythonic方式来处理这种情况.迭代后会丢弃该列表,因此无需保留.也许这样的事情会更好吗?
while ints:
foo += ints[0] * ints[1] + ints[2] * ints[3]
ints[0:4] = []
Run Code Online (Sandbox Code Playgroud)
但是,仍然没有"感觉"正确.: - /
我试图在pandas中读取一个大的csv文件(aprox.6 GB),我收到以下内存错误:
MemoryError Traceback (most recent call last)
<ipython-input-58-67a72687871b> in <module>()
----> 1 data=pd.read_csv('aphro.csv',sep=';')
C:\Python27\lib\site-packages\pandas\io\parsers.pyc in parser_f(filepath_or_buffer, sep, dialect, compression, doublequote, escapechar, quotechar, quoting, skipinitialspace, lineterminator, header, index_col, names, prefix, skiprows, skipfooter, skip_footer, na_values, na_fvalues, true_values, false_values, delimiter, converters, dtype, usecols, engine, delim_whitespace, as_recarray, na_filter, compact_ints, use_unsigned, low_memory, buffer_lines, warn_bad_lines, error_bad_lines, keep_default_na, thousands, comment, decimal, parse_dates, keep_date_col, dayfirst, date_parser, memory_map, nrows, iterator, chunksize, verbose, encoding, squeeze, mangle_dupe_cols, tupleize_cols, infer_datetime_format)
450 infer_datetime_format=infer_datetime_format)
451
--> 452 return _read(filepath_or_buffer, kwds)
453
454 parser_f.__name__ …
Run Code Online (Sandbox Code Playgroud) 将列表划分为大致相等的部分的最佳方法是什么?例如,如果列表有7个元素并将其拆分为2个部分,我们希望在一个部分中获得3个元素,而另一个应该具有4个元素.
我正在寻找像even_split(L, n)
这样的东西L
分成n
几部分.
def chunks(L, n):
""" Yield successive n-sized chunks from L.
"""
for i in xrange(0, len(L), n):
yield L[i:i+n]
Run Code Online (Sandbox Code Playgroud)
上面的代码给出了3个块,而不是3个块.我可以简单地转置(迭代它并获取每列的第一个元素,调用第一部分,然后取第二部分并将其放入第二部分等),但这会破坏项目的顺序.
我有一系列文件到stash(stash{0}
),我想git apply
只是这些文件的一些部分/帅气(通常称为交互模式).
可能吗?
我已经看到有可能执行一个
git stash save -p 'Stash name'
Run Code Online (Sandbox Code Playgroud)
但似乎不可能做到
git stash apply -p 'Stash name'
Run Code Online (Sandbox Code Playgroud)
你知道实现它的方法吗?
在一个基础我有下一个过程.
import csv
reader = csv.reader(open('huge_file.csv', 'rb'))
for line in reader:
process_line(line)
Run Code Online (Sandbox Code Playgroud)
看到这个相关的问题.我想每100行发送一次生产线,以实现批量分片.
实现相关答案的问题是csv对象是不可取消的,不能使用len.
>>> import csv
>>> reader = csv.reader(open('dataimport/tests/financial_sample.csv', 'rb'))
>>> len(reader)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type '_csv.reader' has no len()
>>> reader[10:]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '_csv.reader' object is unsubscriptable
>>> reader[10]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '_csv.reader' object is …
Run Code Online (Sandbox Code Playgroud) 这更像是一个关于理解而不是编程的问题.我是Pandas和SQL的新手.我正在使用pandas从SQL中读取一些特定的chunksize数据.当我运行SQL查询时,例如将pandas导入为pd
df = pd.read_sql_query('select name, birthdate from table1', chunksize = 1000)
Run Code Online (Sandbox Code Playgroud)
我不明白的是,当我不给出一个chunksize时,数据存储在内存中我可以看到内存增长然而,当我给出一个chunksize时,内存使用率并不高.
我有的是,这个df现在包含了许多我可以访问的数组
for df_array in df:
print df.head(5)
Run Code Online (Sandbox Code Playgroud)
我不明白的是,如果SQL语句的整个结果保存在内存中,即df是一个携带多个数组的对象,或者它们就像是指向由SQL查询创建的临时表的指针.
我很乐意对这个过程的实际运作方式有所了解.
可能重复:
如何在Python中将列表拆分为大小均匀的块?
mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)
我需要将这些块传递给第三方API,它一次只能处理4个项目.我可以一次做一个,但它是每个go的HTTP请求和进程,所以我更愿意在尽可能少的查询中做到这一点.
我想做的是将列表分成四个块并提交每个子块.
所以从上面的列表中,我期望:
[[1, 2, 3, 4], [5, 6, 7, 8], [9]]
Run Code Online (Sandbox Code Playgroud) 我正在使用PeerJS
,但认为这个问题WebRTC
一般都可以,希望你能帮助我:
我正在尝试编写一个简单的点对点文件共享.我使用serialisation: "none"
的PeerJS
连接DataChannel
,因为我只发送纯ArrayBuffers
.
对于10mb左右的文件,一切都很好但是我在发送更大的文件(30+ mb)时遇到问题,例如在发送10-20个第一块900mb zip文件连接之后,在同行之间开始投掷Connection is not open. You should listen for the "open" event before sending messages
.(Sender
旁边)
我的设置:
文件被拖动拖放,Sender
用于FileReader
以ArrayBuffer
64x1024字节(与16x1024没有区别)的块读取它,并且一读取每个块 - 它通过peer.send(ChunkArrayBuffer)发送.
Reciever
blob
从每个接收到的块创建,在传输完成后创建完整blob
的那些并给出用户的链接.
我的对等连接设置:
var con = peer.connect(peerid, {
label: "file",
reliable: true,
serialization: "none"
})
Run Code Online (Sandbox Code Playgroud)
我的发送功能:
function sliceandsend(file, sendfunction) {
var fileSize = file.size;
var name = file.name;
var mime = file.type; …
Run Code Online (Sandbox Code Playgroud) 嗨,我想更改大块选项,中间块,而不必创建一个新的块..
运行以下代码我希望得到两个非常不同的大小输出,但由于某种原因,似乎并非如此.
第二个情节根本没有绘图...(当你把它改为绘图时(2:1000)......但无论哪种方式,第二个输出都与第一个相同.两者fig.width=7
.我在做什么错误?
请注意'mid chunk'的重要性,原因是我想在运行函数时多次更改块选项以获得不同大小的不同输出.
```{r}
sessionInfo()
opts_chunk$set(fig.width=3)
plot(1:1000)
opts_chunk$set(fig.width=10)
plot(1:1000)
```
Run Code Online (Sandbox Code Playgroud)
sessionInfo输出如下:
## R version 2.15.1 (2012-06-22)
## Platform: i386-pc-mingw32/i386 (32-bit)
##
## locale:
## [1] LC_COLLATE=English_United Kingdom.1252
## [2] LC_CTYPE=English_United Kingdom.1252
## [3] LC_MONETARY=English_United Kingdom.1252
## [4] LC_NUMERIC=C
## [5] LC_TIME=English_United Kingdom.1252
##
## attached base packages:
## [1] stats graphics grDevices datasets utils methods base
##
## other attached packages:
## [1] knitr_0.7
##
## loaded via a namespace (and not attached):
## [1] digest_0.5.2 …
Run Code Online (Sandbox Code Playgroud) chunks ×10
python ×7
list ×4
csv ×2
pandas ×2
file-sharing ×1
git ×1
git-stash ×1
javascript ×1
knitr ×1
loops ×1
memory ×1
optimization ×1
options ×1
peerjs ×1
r ×1
split ×1
sql-server ×1
webrtc ×1