我正在使用一个列表 p = [[1,2,3],[4,5,6]]
如果我做 :
>>>d=zip(p)
>>>list(d)
[([1, 2, 3],), ([4, 5, 6],)]
Run Code Online (Sandbox Code Playgroud)
虽然,我真正想要的是使用这个:
>>>d=zip(*p)
>>>list(d)
[(1, 4), (2, 5), (3, 6)]
Run Code Online (Sandbox Code Playgroud)
我发现在列表名称之前添加一个'*'给出了我所需的输出,但是我无法弄清楚它们的操作差异.你能解释一下这个区别吗?
老实说,我在这里有点困惑,为什么我不能在相同的数据上迭代两次?
def _view(self,dbName):
db = self.dictDatabases[dbName]
data = db[3]
for row in data:
print("doing this one time")
for row in data:
print("doing this two times")
Run Code Online (Sandbox Code Playgroud)
这将打印出"一次这样做"几次(因为数据有几行),但它根本不会打印出"这样做两次"......
我第一次迭代数据工作正常,但第二次当我运行最后一个列表"for data in data"时,这没有返回...所以执行它一次工作但不是两次......?
仅供参考 - 数据是一个csv.reader对象(如果是这样的原因)......
python docs将此代码作为zip的反向操作:
>>> x2, y2 = zip(*zipped)
Run Code Online (Sandbox Code Playgroud)
特别是"zip()与*运算符一起使用可以解压缩列表".有人可以向我解释*运算符在这种情况下是如何工作的吗?据我所知,*是一个二元运算符,可用于乘法或浅拷贝......这两者似乎都不是这种情况.
我发现PySpark有一个调用的方法,drop但它似乎一次只能删除一列.有关如何同时删除多个列的任何想法?
df.drop(['col1','col2'])
Run Code Online (Sandbox Code Playgroud)
TypeError Traceback (most recent call last)
<ipython-input-96-653b0465e457> in <module>()
----> 1 selectedMachineView = machineView.drop([['GpuName','GPU1_TwoPartHwID']])
/usr/hdp/current/spark-client/python/pyspark/sql/dataframe.pyc in drop(self, col)
1257 jdf = self._jdf.drop(col._jc)
1258 else:
-> 1259 raise TypeError("col should be a string or a Column")
1260 return DataFrame(jdf, self.sql_ctx)
1261
TypeError: col should be a string or a Column
Run Code Online (Sandbox Code Playgroud) 我有这段简单的代码返回标题中的内容.为什么数组不打印?这不仅仅是一个itertools问题,我还注意到它只会返回对象位置的其他代码.
这是代码.我正在运行2.7.1,一个恩惠分布(pylab) - 在课堂上使用它.
import itertools
number = [53, 64, 68, 71, 77, 82, 85]
print itertools.combinations(number, 4)
Run Code Online (Sandbox Code Playgroud) 我是python的新手,我试图在一行中扫描多个以空格分隔的数字(让我们假设'1 2 3'为例)并将其添加到int列表中.我这样做是通过使用:
#gets the string
string = input('Input numbers: ')
#converts the string into an array of int, excluding the whitespaces
array = [int(s) for s in string.split()]
Run Code Online (Sandbox Code Playgroud)
显然它可以工作,因为当我输入'1 2 3'并做一个print(array)输出是:
[1,2,3]
但是我想在没有括号的单行中打印它,并且在数字之间有一个空格,如下所示:
1 2 3
我试过做:
for i in array:
print(array[i], end=" ")
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
2 3追溯(最近一次通话):
print(array [i],end ="")
IndexError:列表索引超出范围
如何在一行中打印整数列表(假设我的前两行代码是正确的),没有括号和逗号?
我有以下基类和子类:
class Event(object):
def __init__(self, sr1=None, foobar=None):
self.sr1 = sr1
self.foobar = foobar
self.state = STATE_NON_EVENT
# Event class wrappers to provide syntatic sugar
class TypeTwoEvent(Event):
def __init__(self, level=None):
self.sr1 = level
self.state = STATE_EVENT_TWO
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我正在检查TypeTwoEvent类的实例,检查我知道在基类中存在的字段 - 我希望它默认值为None.但是,我的代码引发了以下异常:
AttributeError:'TypeTwoEvent'对象没有属性'foobar'
我的印象是基类字段将由子类继承,并且创建子类的实例将实例化基类(从而调用其构造函数)...
我在这里失踪了什么?为什么TypeTwoEvent没有一个None属性-当其所来源的基本类有一个TypeTwoEvent属性?
正如PythonCookbook中提到的,*可以在元组之前添加,*这里的意思是什么?
第1.18章.将名称映射到序列元素:
from collections import namedtuple
Stock = namedtuple('Stock', ['name', 'shares', 'price'])
s = Stock(*rec)
# here rec is an ordinary tuple, for example: rec = ('ACME', 100, 123.45)
Run Code Online (Sandbox Code Playgroud)
在同一部分,**dict提出:
from collections import namedtuple
Stock = namedtuple('Stock', ['name', 'shares', 'price', 'date', 'time'])
# Create a prototype instance
stock_prototype = Stock('', 0, 0.0, None, None)
# Function to convert a dictionary to a Stock
def dict_to_stock(s):
return stock_prototype._replace(**s)
Run Code Online (Sandbox Code Playgroud)
什么是**这里的功能?
多个解包分配的教科书示例如下:
import numpy as NP
M = NP.arange(5)
a, b, c, d, e = M
# so of course, a = 0, b = 1, etc.
M = NP.arange(20).reshape(5, 4) # numpy 5x4 array
a, b, c, d, e = M
# here, a = M[0,:], b = M[1,:], etc. (ie, a single row of M is assigned each to a through e)
Run Code Online (Sandbox Code Playgroud)
(我的问题不numpy具体.事实上,我更喜欢纯Python解决方案.)
对于我现在正在看的那段代码,我看到了这个直接场景的两个复杂问题:
我通常不会知道M的形状; 和
我想解压一定数量的物品(绝对比所有项目更少),我想把其余为单一 容器
回到上面的5x4数组,我非常想做的是分别将前三行M分配给a,b和c(完全如上),其余行(我不知道如何)很多东西,只有一些正整数)到一个容器,all_the_rest = [].
我得到一个矩阵
>>> matrix=[[1, 2, 3], [4, 5, 6]]
Run Code Online (Sandbox Code Playgroud)
我可以用它转置:
>>> zip(*matrix)
[(1, 4), (2, 5), (3, 6)]
Run Code Online (Sandbox Code Playgroud)
我试图在没有它的情况下使用,但失败了:
>>> zip(matrix)
[([1, 2, 3],), ([4, 5, 6],)]
Run Code Online (Sandbox Code Playgroud)
"*"在这里是什么意思?
python ×9
python-3.x ×3
apache-spark ×1
dataframe ×1
inheritance ×1
matrix ×1
namedtuple ×1
pyspark ×1
tuples ×1
unzip ×1
zip ×1