我是python的新手,我想了解一个人如何操纵数组的元素.如果我有例如:
a= ( a11 a12 a13 ) and b = (b11 b12 b13)
a21 a22 a23 b21 b22 b23
Run Code Online (Sandbox Code Playgroud)
我在python中定义了它们,例如:
a=[[1,1],[2,1],[3,1]]
b=[[1,2],[2,2],[3,2]]
Run Code Online (Sandbox Code Playgroud)
我看到我不能参考,a[1][1]但是给a[1]了我一个结果[2,1].所以,我不明白如何访问这些数组的第二行?那会是a21, a22, a23, b21, b22, b23?我怎么做才能使它们成倍增加c1 = a21*b21, c2 = a22*b22?
有什么区别
list = range(100)
Run Code Online (Sandbox Code Playgroud)
和
list[:] = range(100)
Run Code Online (Sandbox Code Playgroud)
在Python?
编辑
我应该已经提到过,在分配列表变量已经分配给列表之前:
list = [1, 2, 3]
list = range(100)
Run Code Online (Sandbox Code Playgroud)
要么
list = [1, 2, 3]
list[:] = range(100)
Run Code Online (Sandbox Code Playgroud) 例如,出于某种原因,我说有一段看起来像这样的代码:
mutable std::vector<std::vector<std::vector<std::vector<
std::vector<MyNamespace::MyType> > > > > myFreakingLongVectorThing;
Run Code Online (Sandbox Code Playgroud)
我收到的警告看起来像这样:
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xstring(1665) : warning
C4503: 'std::vector<_Ty>::operator []' : decorated name length exceeded, name was truncated
with
[
_Ty=std::vector<std::vector<std::vector<std::vector<std::vector<MyNamespace::MyType>>>>>
]
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以重写那个怪异的长矢量的东西,以免得到那个警告?我仍然希望数据结构相同,但不要得到那个警告.我不想禁用警告.可能?
注意:这是Visual Studio 2005
....如果你真的很好奇为什么我正在使用这种可怕的数据结构,它是由自动生成的代码引起的.
我有一个调用DLL的python 2.7程序.我试图将脚本移植到python 3.2.DLL调用似乎工作(即调用时没有错误)但返回的数据没有意义.
以防它可能有用: - 调用有三个参数:两个int(输入)和一个指向ushort数组(输出)的指针.
我尝试过使用python和numpy数组都没有成功.
任何人都可以枚举Python 2.7和3.2之间的差异吗?
提前致谢
编辑
这是一些示例代码.DLL是propietary所以我没有代码.但我确实有C头:
void example (int width, int height, unsigned short* pointer)
Run Code Online (Sandbox Code Playgroud)
python代码是:
width, height = 40, 100
imagearray = np.zeros((width,height), dtype=np.dtype(np.ushort))
image = np.ascontiguousarray(imagearray)
ptrimage = image.ctypes.data_as(ct.POINTER(ct.c_ushort))
DLL.example(width, height, ptrimage)
Run Code Online (Sandbox Code Playgroud)
这适用于python 2.7但不适用于3.2.
编辑2
如果ctypes中的更改只是Cedric指出的那些,那么python 3.2不起作用是没有意义的.所以再看一下代码,我发现在我提到的函数之前有一个调用的准备函数.签名是:
void prepare(char *table)
Run Code Online (Sandbox Code Playgroud)
在python中,我通过以下方式调用:
table = str(aNumber)
DLL.prepare(table)
Run Code Online (Sandbox Code Playgroud)
该问题是否可能是由于Python字符串处理的变化引起的?
所以我已经成功地将Django连接到一个预先存在的数据库(检查,验证和同步),我创建了一个应用程序和一个项目以及所有这些(我正在阅读Django书,我在第5章),但是当我实际运行它并打印东西时,我得到一个(假定的)错误.在python中,我正确导入我需要的东西(from myapp.models import Artist)但是如果我尝试打印,例如,表(print Artist.objects.all()[:5])中的前五行,我得到这个:
[<Artist: Artist object>, <Artist: Artist object>, <Artist: Artist object>, <Artist: Artist object>, <Artist: Artist object>]
Run Code Online (Sandbox Code Playgroud)
为什么它不实际打印值而不是看似占位符?这里有什么我想念的吗?
我正在用Python编程,我正在通过urllib2库从网页获取信息.问题是,该页面能给我提供非ASCII字符,如'ñ','á'等.在非常时刻urllib2得到这个角色,它挑起的异常,如下所示:
File "c:\Python25\lib\httplib.py", line 711, in send
self.sock.sendall(str)
File "<string>", line 1, in sendall:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in position 74: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
我需要处理这些角色.我的意思是,我不想处理异常但是要继续该程序.有没有办法,例如(我不知道这是不是愚蠢),使用另一个编解码器而不是ASCII?因为我必须处理这些字符,所以将它们插入数据库等.
除了import语句之外,Python的"from"关键字还有其他用途吗?
我在调用内置函数来解析Python中的电子邮件时收到以下错误.
txt = parser.Parser.parse(fd, headersonly=False)
Run Code Online (Sandbox Code Playgroud)
而我得到的错误是
TypeError: parse() takes at least 2 arguments (2 given).
Run Code Online (Sandbox Code Playgroud)
谁能告诉我解决这个问题的方法?
我需要一次遍历Python字符串一个字符,但是一个简单的"for"循环代替我给UTF-16代码单元:
str = "abc\u20ac\U00010302\U0010fffd"
for ch in str:
code = ord(ch)
print("U+{:04X}".format(code))
Run Code Online (Sandbox Code Playgroud)
打印:
U+0061
U+0062
U+0063
U+20AC
U+D800
U+DF02
U+DBFF
U+DFFD
Run Code Online (Sandbox Code Playgroud)
当我想要的是:
U+0061
U+0062
U+0063
U+20AC
U+10302
U+10FFFD
Run Code Online (Sandbox Code Playgroud)
有没有办法让Python给我一系列Unicode代码点,无论字符串是如何在引擎盖下实际编码的?我在这里测试Windows,但我需要能在任何地方使用的代码.它只需要在Python 3上工作,我不关心Python 2.x.
到目前为止我能想出的最好的是:
import codecs
str = "abc\u20ac\U00010302\U0010fffd"
bytestr, _ = codecs.getencoder("utf_32_be")(str)
for i in range(0, len(bytestr), 4):
code = 0
for b in bytestr[i:i + 4]:
code = (code << 8) + b
print("U+{:04X}".format(code))
Run Code Online (Sandbox Code Playgroud)
但我希望有一种更简单的方法.
(对精确的Unicode术语进行迂腐的挑剔将以四个线索无情地击败头部.我想我已经明确了我在这之后的事情,请不要浪费空间"但是UTF-16是从技术上讲,Unicode也是"一种论点."
原始情况:
我正在处理的应用程序将在特定文件已添加数据并准备好读取时接收来自另一个应用程序的通知.目前我有这样的事情:
class Foo(object):
def __init__(self):
self.myFile = open("data.txt", "r")
self.myFile.seek(0, 2) #seeks to the end of the file
self.mainWindow = JFrame("Foo",
defaultCloseOperation = JFrame.EXIT_ON_CLOSE,
size = (640, 480))
self.btn = JButton("Check the file", actionPerformed=self.CheckFile)
self.mainWindow.add(self.btn)
self.mainWindow.visible = True
def CheckFile(self, event):
while True:
line = self.myFile.readline()
if not line:
break
print line
foo = Foo()
Run Code Online (Sandbox Code Playgroud)
最终,当在套接字上收到某个消息时,将触发CheckFile().目前,我正在从JButton触发它.
尽管程序中的任何其他位置都没有触及该文件,并且我没有with在文件上使用该文件,但是ValueError: I/O operation on closed file当我尝试readline()它时,我仍然继续使用该文件.
初步解决方案
在试图弄清楚文件何时被关闭时,我将我的应用程序代码更改为:
foo = Foo()
while True:
if foo.myFile.closed == True: …Run Code Online (Sandbox Code Playgroud)