相关疑难解决方法(0)

zip(列表)和zip(*list)之间的区别

我正在使用一个列表 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)

我发现在列表名称之前添加一个'*'给出了我所需的输出,但是我无法弄清楚它们的操作差异.你能解释一下这个区别吗?

python python-3.x

36
推荐指数
5
解决办法
2万
查看次数

为什么我不能在同一数据上迭代两次?

老实说,我在这里有点困惑,为什么我不能在相同的数据上迭代两次?

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

34
推荐指数
4
解决办法
2万
查看次数

解压缩和*运算符

python docs将此代码作为zip的反向操作:

>>> x2, y2 = zip(*zipped)
Run Code Online (Sandbox Code Playgroud)

特别是"zip()与*运算符一起使用可以解压缩列表".有人可以向我解释*运算符在这种情况下是如何工作的吗?据我所知,*是一个二元运算符,可用于乘法或浅拷贝......这两者似乎都不是这种情况.

python unzip

31
推荐指数
4
解决办法
3万
查看次数

如何在Python中排除Spark数据帧中的多个列

我发现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)

dataframe apache-spark apache-spark-sql pyspark

25
推荐指数
3
解决办法
3万
查看次数

Python返回`<itertools.combinations对象在0x10049b470>` - 我该如何访问它?

我有这段简单的代码返回标题中的内容.为什么数组不打印?这不仅仅是一个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

24
推荐指数
2
解决办法
4万
查看次数

在单行python3中打印一个int列表

我是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:列表索引超出范围

如何在一行中打印整数列表(假设我的前两行代码是正确的),没有括号和逗号?

python python-3.x

21
推荐指数
5
解决办法
6万
查看次数

Python类继承:AttributeError:'[SubClass]'对象没有属性'xxx'

我有以下基类和子类:

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属性?

python inheritance class-attributes

20
推荐指数
1
解决办法
3万
查看次数

*tuple和**dict在Python中意味着什么?

正如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)

什么是**这里的功能?

python tuples namedtuple python-3.x iterable-unpacking

18
推荐指数
1
解决办法
2万
查看次数

当您不知道序列长度时,在Python中进行多次解包分配

多个解包分配的教科书示例如下:

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 = [].

python variable-assignment

13
推荐指数
2
解决办法
1万
查看次数

python zip(*X)用"*"(星号)做什么?

我得到一个矩阵

>>> 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 zip matrix

9
推荐指数
0
解决办法
5135
查看次数