将字母对转换为笛卡尔坐标或('A','B')转换为(1,2)

时间:2011-03-10 23:49:46

标签: python-3.x string-formatting

我正在写我的第一个节目。我一直在使用python3这样做。我遇到了一个我认为非常基本的问题我找不到任何地方讨论的答案,或者我可能只是看得太密集了。谢谢你对我缺乏经验的耐心。

组合('gimp',2)返回

[('g', 'i'), ('g', 'm'), ('g', 'p'), ('i', 'm'), ('i', 'p'), ('m', 'p')]

我希望这些是笛卡尔坐标,所以我已经完成了这个......

(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,x) = range(17)

希望这些字母会用数字切换,但字母周围的麻烦(')会阻止这些。

如何让列表更像?

[(g,i),(g,m)...]

我尝试过没有运气的替换功能

combo.replace("'","")

或者如果有一种更直接的方法可以将字母组合列表转换为坐标,我很乐意知道它。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

从Python中的另一个新手,你可以创建一个字母,其中字母为键,选择的数字为每个字母的值,并为每个字母提取一个数字。

#1 make a dict
prefValues = {'g' : 1, 'i' : 2, 'm' : 3, 'p' : 4}

#2 make a list 
word = []
for char in 'gimp':
    #if the letter is in the dict
    if char in prefValues:
        #append in the list the corresponding value
        word.append(prefValues[char])   

现在你继续为笛卡尔坐标生成元组。如果您无法从列表中生成配对,请查看此答案Pairs from single list

答案 1 :(得分:0)

谢谢stef和apalala的帮助。我无法实现您的解决方案,但它确实帮助我想象出一个我能够工作的不优雅的解决方案。我想在这里发布我的解决方案,以防有人像我一样的编码敏锐度可能会发现它很有用。

我所做的是检查我对每种可能组合的组合列表,如果有组合,我扩展了一个新的坐标列表和相应的数字。我认为这就是上述解决方案将以更有效的方式产生的结果。我的目的只包括120种可能的组合,所以虽然乏味,但这种方法是可行的。

 combo = (list (combinations (abcdefghijlmnop, 2)) 

 cords = []
 if ('a','b') in combo:
      cords.append ((0,1))
 else:quit

然后我重复了(a,c)(a,d)等的最后三行。

答案 2 :(得分:0)

您可能希望尝试使用字符的序号值。如果您使用“a”的序数值中字符的序数值的偏移量,则应获得适当的坐标。

尝试类似:

from itertools import combinations

word = "gimp"

coords = [(ord(x) - ord('a'), ord(y) - ord('a')) for x, y in combinations(word.lower(), 2)]

这会将coords设置为:

[(6, 8), (6, 12), (6, 15), (8, 12), (8, 15), (12, 15)]

注意:如果您在单词中使用非ASCII字符,这将无法正常工作。