zipped数组返回<zip object =“”at =“”0x02b6f198 =“”>

时间:2015-11-08 11:44:54

标签: arrays sorting python-3.x zip

我有两个数组:public class Game { public static void main(String[] args) throws IOException { CharacterCreator heroCreator = new CharacterCreator(); CharacterCreator.showAllClasses(); Scanner sc = new Scanner(System.in); int scan = sc.nextInt(); String chosenClass = CharacterCreator.getCharacterClass(scan); Character hero = CharacterCreator.createCharacter(chosenClass); try { hero.displayCharacter(); }catch (Exception e){ System.out.println("Problem displaying character data"); } hero.getInventory().addToInventory("Long sword"); CharacterCreator heroCreator2 = new CharacterCreator(); CharacterCreator.showAllClasses(); Scanner sc2 = new Scanner(System.in); int scan2 = sc.nextInt(); String chosenClass2 = CharacterCreator.getCharacterClass(scan2); Character hero2 = CharacterCreator.createCharacter(chosenClass2); try { hero2.displayCharacter(); }catch (Exception e){ System.out.println("Wrong input"); } if(hero instanceof Mage) { ((Mage)hero).getSpellBook().addToSpellBook("Magic Missiles"); ((Mage)hero).getSpellBook().addToSpellBook("Fireball"); ((Mage)hero).getSpellBook().addToSpellBook("Mage Armor"); ((Mage)hero).getSpellBook().showSpellBook(); ((Mage)hero).getSpellBook().getSpellFromSpellbook("Fireball").castSpell(hero, hero2); ((Mage)hero).getSpellBook().getSpellFromSpellbook("Magic Missiles").castSpell(hero, hero2); ((Mage)hero).getSpellBook().getSpellFromSpellbook("Mage Armor").castSpell(hero, hero); } } } abstract public class Character { private Equipment equipment; private Map<String, Integer> inventory; protected Character(String name){ equipment = new Equipment(); inventory = new HashMap<String, Integer>(); } protected Character(String name, int lvl){ equipment = new Equipment(); inventory = new HashMap<String, Integer>(); } } public Equipment getEquipment() { return equipment; } public Map getInventory() { return inventory; } } public class Inventory { private Map<String,Integer> inventory; Inventory() { inventory = new HashMap<String, Integer>(); } public void addToInventory(String item) { boolean found = false; try { for (Iterator<Map.Entry<String, Integer>> iter = inventory.entrySet().iterator(); iter.hasNext(); ) { Map.Entry<String, Integer> newItem = iter.next(); if (newItem.getKey() == item) { inventory.put(item, inventory.get(newItem) + 1); break; } } }catch (Exception e) { System.out.println(item + " : adding failed"); } if (!found) { inventory.put(item,1); } } public void showInventory() { System.out.println("Show Inventory: "); for (Map.Entry<String,Integer> entry: inventory.entrySet()) { System.out.println( entry.getKey() + ", quantity: " + entry.getValue() ); } System.out.println(""); } } public class Mage extends Character { private SpellBook spellBook; public Mage(String name) { super(name); SpellBook spellbook = new SpellBook(); } protected Mage(String name, int lvl){ super(name, lvl); spellBook = new SpellBook(); } public SpellBook getSpellBook() { return spellBook; } } } public class SpellBook { private Map<String, Spell> spellBook; SpellBook() { spellBook = new HashMap<String, Spell>(); } public Map getSpellBook() { return spellBook; } public void addToSpellBook(String spellName) { Spell newSpell = null; try { if (DamageSpell.getSpell(spellName) != null) { newSpell = DamageSpell.getSpell(spellName); } else if (ChangeStatSpell.getSpell(spellName) != null) { newSpell = ChangeStatSpell.getSpell(spellName); } System.out.println(newSpell.getSpellName() + " has been added to the spellbook"); spellBook.put(newSpell.getSpellName(), newSpell); } catch (Exception e){ System.out.println("Adding " + spellName +"to spellbook has failed"); } } public void showSpellBook() { System.out.println("Show spellbook: "); for (Iterator<String> iter = spellBook.keySet().iterator(); iter.hasNext(); ) { String spell = iter.next(); System.out.println(spell); } System.out.println(""); } public Spell getSpellFromSpellbook(String spellName) { Spell spl = null; //Spell splGet = spellBook.get(spellName); /* straight forward implementation*/ // System.out.println("The spell " + splGet.getSpellName() + " has been retrived from the spellbook by using get method"); try { for (Iterator<Map.Entry<String, Spell>> iter = spellBook.entrySet().iterator(); iter.hasNext(); ) { Map.Entry<String, Spell> spell = iter.next(); if (spell.getKey() == spellName) { spl = spell.getValue(); } } }catch (Exception e) { System.out.println(spellName + " : no such spell in spellbook"); } return spl; } } X = [1,2,3,4,5,3,8]。当我打印这个拉链数组时,它会产生Y = ['S', 'S', 'S', 'S', 'S', 'C', 'C']。压缩这两个数组的原因是我可以对行中的<zip object at 0x02B6F198>对应Y进行排序

sorted(X)

这行代码并不排序Y我想要的方式(sortedY = [y for x,y in sorted(zip(X,Y))]),但sortedY = ['S','S','C','S','S','S','C']SortedX的排列方式相同。

我有第二个程序,我使用这个代码,它工作正常但是这个程序的尺寸明显小于原始程序。

1 个答案:

答案 0 :(得分:4)

如果您尝试直接打印压缩列表,那么这将无效。 zip返回一个对象,因此当您尝试打印它时,您只需获取对象方法。如果要将其视为列表,请应用返回列表的操作。

X = [1,2,3,4,5,3,8]
Y = ['S', 'S', 'S', 'S', 'S', 'C', 'C']

# Some Simple Methods Include
print(list(zip(X, Y)))
print([i for i in zip(X, Y)])

# Output
[(1, 'S'), (2, 'S'), (3, 'S'), (4, 'S'), (5, 'S'), (3, 'C'), (8, 'C')]

现在我不确定问题是什么,因为你提供的应该是正常的

sortedY = [y for x,y in sorted(zip(X,Y))]
print(sortedY)

# Output
['S', 'S', 'C', 'S', 'S', 'S', 'C']

正如你所看到的,它对Y排序的X排序

print(sorted(zip(X,Y)))

#Output (X, Y)
[(1, 'S'), (2, 'S'), (3, 'C'), (3, 'S'), (4, 'S'), (5, 'S'), (8, 'C')]